提问人:Mika 提问时间:7/20/2023 最后编辑:Kiran ShahiMika 更新时间:7/21/2023 访问量:109
unsigned int VS python struct 模块中的 Unsigned long
Unsigned int VS Unsigned long in python struct module
问:
我正在阅读python结构模块的文档,发现了有趣的事情。
Unsigned int 和 unsigned long 都等于 4 个字节。
但是,据我所知,unsigned int 可以是 2 或 4 个字节,具体取决于 CPU。
所以,问题来了。我有带有little-endian系统的PC。这台电脑通过本地网络共享一些数据。我想通过套接字在另一台 PC(带有一些字节序系统,我不知道)中接收此数据。 我知道,主机 PC 将发送 4 个变量,这些变量uint32_t。
我应该如何在python中解压缩这些值,为什么?我应该使用 unsigned long 还是 unsigned int?在文档中,它们具有相同的大小。那么,格式字符串会看起来像 4L 还是 4I?
还有另一个问题 - 我应该如何避免字节序冲突?主机 PC 是 100% 小端,将来不会改变。客户端 PC 可能不同,那么,我应该编写这样的结构字符串吗:<4L(或 <4I,取决于上一个问题)?或者我应该使用 !4 bc 我从本地网络接收数据(通过套接字)?
请阐明这个问题,只要我把这个话题弄乱一点。
答:
0赞
Captain Trojan
7/20/2023
#1
为什么要为“C型”列而烦恼?就你和我而言,这只是 Python 中的“一些”库。您想将接下来的 4 个字节读取为无符号整数吗?只是使用或,这显然无关紧要。struct.unpack('I', buffer)
struct.unpack('L', buffer)
另外,我不确定 or 中的字符“4”是什么意思,除非您尝试从缓冲区中准确解析 4 个无符号 4 字节整数(总共 16 个字节)。4L
4I
评论
1赞
Mika
7/20/2023
是的,我想读取 4 个整数。事实上,我有一个更大的 C 结构,所以我需要编写一个相当长的结构字符串来解压缩这个结构。
评论