如何编写反序列化函数将字节数组转换为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;
}
感谢!如果有更好的方法,请告诉我。谢谢!
value = *(uint32*)buffer;
就能够运作。 - Mark Wilkinsbuffer
没有指向正确对齐的内存地址,这段看似聪明的代码将会引发未定义行为。 - Roland Illigunsigned long
不是32位,你应该使用uint32_t
(来自stdint.h
); 为了安全起见,您还应该添加一个编译时断言,即CHAR_BIT == 8
。 - David X