1.取值比较法
#include <windows.h>
#include <stdio.h>int main(int argc,char *argc[])
{Dword dwSmallnum = Ox01020304;/定义一个四字节的数(十六进制)if(*(BYTE*)&dwSmallnum == Ox04)/如果第一个字节为04{printf("Small Sequence\n");}else{printd("Big Sequense\n");}
return 0;
}
2.直接转换比较法
#include <windows.h>
#include <stdio.h>
#pragme comment(lib,"ws2_32")int main(int rage,char*argv[])
{DWORD dwSmallNum=0x01020304;if(dwSmallNum==htonl(dwSmallNum)){printf("Small Squence.\r\n");}else{printf("Big Squence.\r\n");}
return 0;
}
1> htohl() 函数 的作用是将一个32位数从主机字节顺序转换成网络字节顺序。
2>网络字节序:大端字节序()
网络上传输的数据都是字节流,对于一个多字节数值,在进行网络传输的时候,先传递哪个字节?也就是说,当接收端收到第一个字节的时候,它将这个字节作为高位字节还是低位字节处理(即传输到高地址还是低地址),是一个比较有意义的问题:
UDP/TCP/IP协议规定:把接收到的第一个字节当作高位字节看待,这就要求发送端发送的第一个字节是高位字节;代入上述代码,即把01放入高地址,04放入
所以:网络字节序就是大端字节序, 有些系统的本机字节序是小端字节序, 有些则是大端字节序, 为了保证传送顺序的一致性, 所以网际协议使用大端字节序来传送数据。
3>如何证明自己的机器采用了哪种字节顺序:
/* 确定你的电脑是大端字节序还是小端字节序 */
#include <stdio.h>int check1()
{int i = 1; //1在内存中的表示: 0x00000001char *pi = (char *)&i; //将int型的地址强制转换为char型return *pi == 0; //如果读取到的第一个字节为1,则为小端法,为0,则为大端法
}int main()
{if (check1() == 1) //如果读取到的第一个字节为1,则为小端法,为0,则为大端法printf("big\n");elseprintf("little\n");return 0;
}