其他分享
首页 > 其他分享> > 在c中处理字节序

在c中处理字节序

作者:互联网

我正在努力将系统从python转换为c.我需要能够在c中执行通常使用Python的struct.unpack执行的操作(将二进制字符串解释为数值).对于整数值,我可以使用stdint.h中的数据类型来实现(某种程度)工作:

struct.unpack("i", str) ==> *(int32_t*) str; //str is a char* containing the data

这适用于little-endian二进制字符串,但在big-endian二进制字符串上失败.基本上,我需要等同于使用> struct.unpack中的标记:

struct.unpack(">i", str) ==> ???

请注意,如果有更好的方法,我会全力以赴.但是,我不能使用c 11,也不能使用除Boost之外的任何第三方库.我还需要能够解释浮点数和双精度数,如struct.unpack(“> f”,str)和struct.unpack(“> d”,str),但是当我进入时我会得到它解决这个问题

注意我应该指出,在这种情况下,我的机器的字节顺序是无关紧要的.我知道我在代码中收到的比特流总是大端的,这就是为什么我需要一个始终涵盖大端案例的解决方案. BoBTFish在评论中指出的文章似乎提供了一个解决方案.

解决方法:

一次解包字符串一个字节.

unsigned char *str;
unsigned int result;

result =  *str++ << 24;
result |= *str++ << 16;
result |= *str++ << 8;
result |= *str++;

标签:python,c-2,endianness
来源: https://codeday.me/bug/20190715/1468997.html