加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在c中处理字节序

发布时间:2020-12-16 10:23:29 所属栏目:百科 来源:网络整理
导读:我正在努力将系统从 python转换为c.我需要能够在c中执行通常使用 Python的struct.unpack执行的操作(将二进制字符串解释为数值).对于整数值,我可以使用stdint.h中的数据类型来实现(某种程度)工作: struct.unpack("i",str) == *(int32_t*) str; //str is a ch
我正在努力将系统从 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++;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读