我在阅读python struct模块的docs,发现了有趣的事情。
x1c 0d1x的数据
Unsigned int和unsigned long都等于4字节。
但是,据我所知,unsigned int可以是2或4字节,这取决于CPU。
所以,问题来了。我的电脑是little-endian系统。这台PC机通过局域网共享一些数据。我想在另一台PC上通过套接字接收此数据(使用一些endian系统,我不知道)。我知道,主机PC将发送4个变量,即uint32_t。
我应该如何在python中解包这些值,为什么?我应该使用unsigned long还是unsigned int?在文档中,它们具有相同的大小。所以,格式字符串将看起来像4L或4 I?
还有一个问题--如何避免endianness冲突?主机PC是100%的小端字节序,将来也不会改变。客户端PC可以不同,所以,我应该写一个这样的结构字符串:<4L(或<4 I,取决于上一个问题)?或者我应该用**!4**bc我从本地网络接收数据(通过套接字)?
研究一些relativequestions没有帮助很多,所以,我在这里。
请,阐明这个问题,只要我搞砸了这个主题一点。
1条答案
按热度按时间ubbxdtey1#
为什么要在“C型”栏上费心呢?就你和我而言,这只是Python中的“一些”库。你想把接下来的4个字节读成一个无符号整数吗?只要使用
struct.unpack('I', buffer)
或struct.unpack('L', buffer)
,显然没有关系。另外,我不确定
4L
或4I
中的字符“4”是什么意思,除非您试图从缓冲区中解析4个无符号4字节整数(总共16个字节)。