编写反序列化函数将字节数组转换为 32 位无符号整数的最佳方法是什么?
typedef unsigned long uint32;
uint32 deserialize_uint32(unsigned char *buffer)
{
uint32 value = 0;
value |= buffer[0] << 24;
value |= buffer[1] << 16;
value |= buffer[2] << 8;
value |= buffer[3];
return value;
}
unsigned char* deserialize_uint32B(unsigned char *buffer, uint32* value)
{
*value = 0;
*value |= buffer[0] << 24;
*value |= buffer[1] << 16;
*value |= buffer[2] << 8;
*value |= buffer[3];
return buffer + 4;
}
谢谢!或者如果有更好的方法请告诉我..谢谢!
我更喜欢你的第一个变体而不是第二个。或者,您可以通过使用四个局部变量来利用并行处理,这些变量将各个字节移动正确的量。然后,在最后一行你return b0shifted | b1shifted | b2shifted | b3shifted
.
无论如何,这一切都取决于您的编译器。您的第二个变体包含更多加载/存储操作,因此第一个变体具有更少的抽象操作。
就可读性、可理解性和清晰度而言,你的第一个变体非常棒。它也适用于您使用的任何奇怪的平台(字节序、对齐方式),前提是CHAR_BIT == 8
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)