Python: struct 模块之字节对齐问题

P y t h o n Python Python 在二进制写文件时,可以用 s t r u c t struct struct 模块将数据捆绑成结构体转化成字节流,为了方便与 C C C 交互,避免 C C C 在读取二进制字节流时因为 C C C 的字节对齐问题而造成不必要的麻烦, P y t h o n Python Python s t r u c t struct struct 模块默认按照 C C C 的字节对齐方式进行对齐。

然而,并不像想象中那样简单。 P y t h o n Python Python s t r u c t struct struct 模块的字节对齐坑了我整整一上午。

首先我用 P y t h o n Python Python 写好了二进制文件,并且测试用 P y t h o n Python Python 去读取该二进制文件,测试良好,没有什么问题,但是当我写 C C C 的接口时,却发现数据一直有问题。经过一上午的排查,总算发现,字节的读取地址出现了问题,然而 P y t h o n Python Python 的却没有这个问题,所以一下子就断定是 s t r u c t struct struct 模块的字节对齐出了幺蛾子。

这里我用 P y t h o n Python Python 写进了一堆 H e a d e r Header Header

struct header
{
	long long a;
	int b;
};

转化成 s t r u c t struct struct 模块的格式化字符串为 ′ q i ′ 'qi' qi,在 C C C 中,由于字节对齐的缘故,这个 H e a d e r Header Header 应该占有 16 16 16 个字节,但是在 P y t h o n Python Python 里却不是这样……

>>> import struct
>>> struct.calcsize('qi')
12

竟然等于 12 12 12 个字节,显然没有字节对齐……然后试了一下 ′ i q ′ 'iq' iq,又让我吃了一惊……

>>> struct.calcsize('iq')
16

你没有看错,这里竟然字节对齐了,变成了 16 16 16 字节。这波操作骚气啊……

C C C 反复测试了两种写法,结果均为 16 16 16 字节。

不知道该怎么喷 P y t h o n Python Python,最后图个省事儿,弄成了 ′ 2 q ′ '2q' 2q,妈妈再也不用担心字节对齐的问题了。

不过,有那么一种可能是,不同的 C C C 编译器对这两种写法的字节对齐方式存在差异?不得而知,也没有具体去测试,毕竟我是一个不求甚解的人。

对了,如果有哪位大佬的编译器的确是不一样的字节对齐结果,麻烦告知用的是什么编译器,让我避开他……

全部评论

相关推荐

今天 11:10
武汉纺织大学 C++
点赞 评论 收藏
分享
沟头学院:无关比赛不要写,这样会显着你主次不分,比赛不要撒谎,有哪些就写那些,创新创业建议删除。技能特长可以适当夸大。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 听劝,这个简历怎么改 #
14064次浏览 182人参与
# 面试被问“你的缺点是什么?”怎么答 #
6309次浏览 98人参与
# 水滴春招 #
16228次浏览 341人参与
# 入职第四天,心情怎么样 #
11265次浏览 63人参与
# 租房找室友 #
7997次浏览 53人参与
# 读研or工作,哪个性价比更高? #
26139次浏览 356人参与
# 职场新人生存指南 #
199165次浏览 5506人参与
# 参加完秋招的机械人,还参加春招吗? #
26960次浏览 276人参与
# 文科生还参加今年的春招吗 #
4101次浏览 31人参与
# 简历无回复,你会继续海投还是优化再投? #
48608次浏览 561人参与
# 你见过最离谱的招聘要求是什么? #
144708次浏览 829人参与
# 如果重来一次你还会读研吗 #
155712次浏览 1706人参与
# 机械人选offer,最看重什么? #
69076次浏览 449人参与
# 选择和努力,哪个更重要? #
44261次浏览 492人参与
# 如果再来一次,你还会学硬件吗 #
103638次浏览 1245人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
20517次浏览 413人参与
# 招聘要求与实际实习内容不符怎么办 #
46662次浏览 494人参与
# 22届毕业,是读研还是拿外包offer先苟着 #
4652次浏览 27人参与
# 你们的毕业论文什么进度了 #
901179次浏览 8960人参与
# 软开人,你觉得应届生多少薪资才算合理? #
81368次浏览 496人参与
# 国企还是互联网,你怎么选? #
109188次浏览 853人参与
牛客网
牛客企业服务