如何在C++中实现比特顺序倒置

如何在C++中实现比特顺序倒置,第1张

我这里给出了单字节函数,双字节和四字节的你可以类似写出来

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);

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12175030.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存