unsigned char swap(unsigned char a)
{
unsigned char ans=0;
unsigned char temp=a;
unsigned x=0x80;
while(temp)
{
ans|=(temp & 0x01)x:0;
x>>=1;
temp>>=1;
}
return ans;
}
把数字转换为网络字节序
由于数据在计算机中的存放顺序不尽相同如0X1122,高字节为0X11,低字节为0X22,在内存中占用两个字节的存储空间,可以高位字节(0X11)存于高字节,低位字节(0X22)存于低字节,也可能0X11存于低字节,0X22存于高字节,而网络是传送数据时高低字节是有规定,好像是低字节在先(记不清了,可以查资料),所以在用网络传数据的时候就要转换字节序,通常用的函数有htonl,htons,htonl是将一个数转换为32位网络字节序的数,htons是转换为16位网络字节序的数
htonl函数,是将主机端一个无符号长整数转换为TCP/IP协议网络的大端(big endian)格式的字节序列!
ntohl函数正好相反!
这两个函数多用于使用Intel处理器的主机,因为Intel处理器使用小端数据格式(little endian)!而TCP/IP协议网络是用大端(big endian)格式的!
不麻烦, 没有htons和htonl但可以用pack来处理
network endian 就是 big endian byte order
$ns = pack('n', 1234);
$nl = pack('N', 65536);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)