什么是大端模式、小端模式
判断字节序
可以通过下面的小程序测试自己的机器是大端字节序还是小端字节序
#include
union { char ch; int i; }un; int main(void) { un.i = 0x; if(un.ch == 0x12) { printf("big endian\n"); } else { printf("small endain\n"); } return 0;
在测试程序中,使用联合体的原因是:union型数据所占的空间等于其最大的成员所占的空间。对union型成员的存取都是相对于该联合体基地址的偏移量为0处开始,也就是联合体的访问不论对哪个变量的存取都是从union的首地址开始的。通过检测第一个字节存放的数据即可得出结果。
网络字节序
字节序转换函数
#include
//将主机字节序转换为网络字节序 unit32_t htonl (unit32_t hostlong); unit16_t htons (unit16_t hostshort); //将网络字节序转换为主机字节序 unit32_t ntohl (unit32_t netlong); unit16_t ntohs (unit16_t netshort); 说明:h -----host;n----network ;s------short;l----long。
例如:
#include
#include
int main() { unsigned int x = 0x; unsigned char *p = (unsigned char *)&x; printf("%0x_%0x_%0x_%0x\n",p[0],p[1],p[2],p[3]); unsigned int y = htonl(x); p = (unsigned char*)&y; printf("%0x_%0x_%0x_%0x\n",p[0],p[1],p[2],p[3]); return 0; }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/204452.html原文链接:https://javaforall.net
