我正在将系统从python转换为c++。我需要能够在c++中执行通常通过使用Python的struct.unpack
(将二进制字符串解释为数值)来执行的操作。对于整数值,我可以使用stdint.h
中的数据类型来完成(某种)工作:
struct.unpack("i", str) ==> *(int32_t*) str; //str is a char* containing the data
这对于小端字节二进制字符串正常工作,但对大端字节二进制字符串无效。基本上,我需要等效于在struct.unpack中使用
>
标记:struct.unpack(">i", str) ==> ???
请注意,如果有更好的方法可以做到,我全神贯注。但是,我不能使用c++ 11,也不能使用Boost以外的任何第三方库。我还需要能够解释浮点数和 double 数,就像
struct.unpack(">f", str)
和struct.unpack(">d", str)
一样,但是当我解决这个问题时,我会明白这一点。注意我应该指出,在这种情况下,我的计算机的字节序无关。我知道我在代码中收到的比特流将始终是big-endian,这就是为什么我需要始终覆盖big-endian情况的解决方案的原因。 BoBTFish在评论中指出的文章似乎提供了解决方案。
最佳答案
一次将字符串解压缩一个字节。
unsigned char *str;
unsigned int result;
result = *str++ << 24;
result |= *str++ << 16;
result |= *str++ << 8;
result |= *str++;