python struct,网络应用中的字节序与对齐,以及unsigned int与unsigned long的区别
我有两个关于 struct
的问题,内容来自Python文档:
字节顺序、大小和对齐:在网络通信中,我应该用 !
代替 =
吗?
比如说: struct.pack("!BBH", 1, 12, 512)
和 struct.pack("=BBH", 1, 12, 512)
哪个更合适?
格式字符:无符号整数(I)和无符号长整型(L)有什么区别?因为它们都是4个字节的大小。
谢谢你的时间,如果这个问题很傻,请多多包涵 :-)
1 个回答
2
如果你希望你的代码在任何地方运行都能产生相同的结果,那你为什么还要用 = 呢?所以,当然,你应该使用一个大家都能理解的代码。标准的写法是 !
,所以就用 !
吧。
看看格式代码表上面的标题:
‘标准大小’这一列指的是在使用标准大小时,打包值的字节数;也就是说,当格式字符串以 '<'、'>'、'!' 或 '=' 开头时的情况。而使用本地大小时,打包值的大小会依赖于你的平台。
所以,如果你使用 @
格式代码或者不写格式代码,那么 I
和 L
的大小在理论上可能会因为你的平台不同而有所不同。