我正在将系统从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++;

10-02 00:54
查看更多