大端存储与小端存储

Tags
C语言
ID
7
 
💡
TL;DR 1. 大端反的;2. 数字转字符验证;3. h to n (s/l):host to net
大端存储(Big Endian)和小端存储(Little Endian)是两种不同的字节序(Byte Order)方式,用于表示多字节数据在内存中的存储顺序。
在大端存储中,较高的有效字节(Most Significant Byte,MSB)存储在较低的内存地址,而较低的有效字节(Least Significant Byte,LSB)存储在较高的内存地址。这类似于将数字的高位放在前面的表示方式。
在小端存储中,较低的有效字节(LSB)存储在较低的内存地址,而较高的有效字节(MSB)存储在较高的内存地址。这类似于将数字的低位放在前面的表示方式。
下面是一个用C语言编写的判断大端存储还是小端存储的例子:
#include <stdio.h> int isLittleEndian() { int num = 1; char *ptr = (char *)&num; return (int)*ptr; } int main() { if (isLittleEndian()) { printf("Little Endian\\n"); } else { printf("Big Endian\\n"); } return 0; }
该例子使用一个整数变量 num,并将其地址强制转换为 char 类型的指针。然后,通过读取指针指向的字节值,判断该字节的值,如果为 1,则表示小端存储,否则表示大端存储。
在C语言中,可以使用以下函数来进行字节序的转换:
  1. htons():将16位无符号短整型(unsigned short)从主机字节序转换为网络字节序。
  1. htonl():将32位无符号长整型(unsigned long)从主机字节序转换为网络字节序。
  1. ntohs():将16位无符号短整型(unsigned short)从网络字节序转换为主机字节序。
  1. ntohl():将32位无符号长整型(unsigned long)从网络字节序转换为主机字节序。
这些函数在网络编程中常用于处理字节序的转换,以确保在不同平台之间的数据传输正确解释。这些函数可以在 <arpa/inet.h> 头文件中找到。