编写反序列化函数以将字节数组转换为 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
。
关于c - 反序列化函数(字节数组到 uint32),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6145390/