计算机在存储多字节的整数(不包含浮点数)时,会有字节序问题
字节序存储方式分为两种:小段存储、大端存储
小端存储字节序(littel endian)
个人PC机基本上采用小端存储
多字节的整数,整数的低字节数据存储在低地址中,整数的高字节数据存储在高地址中,与阅读习惯相反(以十六进制的整数四个字节 0x12345678 为例)
大端存储字节序(big endian)
网络设备 数据在网络传输中,都采用大端字节序
多字节的整数,整数的低字节数据存储在高地址中,整数的高字节数据存储在低地址中与,阅读习惯相同,存储时 从左往右存储整数(以十六进制的整数四个字节 0x12345678 为例)
因此在文件传输时(个人—网络—个人)一定要统一字节序。那么要转换字节序,就要用到字节序转换函数(因为32系统没有64位的字节转换函数,因此只列64位系统中的字节转换函数)
//h home 本地
//be big endian 大端字节序(网络字节序)
//le little endian
uint16_t htobe16(uint16_t host_16bits); //本地字节序转 big endian(网络字节序)
uint16_t htole16(uint16_t host_16bits); //本地字节序转 little endian
uint16_t be16toh(uint16_t big_endian_16bits);
uint16_t le16toh(uint16_t little_endian_16bits);
uint32_t htobe32(uint32_t host_32bits);
uint32_t htole32(uint32_t host_32bits);
uint32_t be32toh(uint32_t big_endian_32bits);
uint32_t le32toh(uint32_t little_endian_32bits);
uint64_t htobe64(uint64_t host_64bits);
uint64_t htole64(uint64_t host_64bits);
uint64_t be64toh(uint64_t big_endian_64bits);
uint64_t le64toh(uint64_t little_endian_64bits);
以上就是计算机存储字节序的相关介绍