我不懂struct.unpack

时间:2017-04-07 19:28:00

标签: python struct

使用下一个代码:

shmem = mmap.mmap(0, 20, "MumbleLink", mmap.ACCESS_READ)
print("size: "+str(struct.calcsize("IL3f3f3f512s3f")))
print(struct.unpack("IL3f3f3f512s3f", shmem))

我得到了这个输出:

size: 568
Traceback (most recent call last):
  File "C:\Users\Saelyth\Desktop\test.py", line 8, in <module>
    print(struct.unpack("IL3f3f3f512s3f", shmem))
struct.error: unpack requires a bytes object of length 568

为什么它告诉我它需要一个长度为568的对象,如果calcsize说它已经是568?

另外,值得一提的是,我一直在谷歌搜索(并检查This)以获取 IL3f3f3f512s3f 的答案,或者如何创建自己的字符串来读取内存,例如1024,而不是568,但到目前为止我没有运气。关于结构部分如何工作的详细答案将有所帮助,或指出我如何理解如何计算我需要用来解包shmem的字符串的正确方向。

这与This问题有关。

1 个答案:

答案 0 :(得分:1)

您只检查输出中的大小,该大小不适用于您的内存映射。所以将你的第一行改为:

shmem = mmap.mmap(0, 568, "MumbleLink", mmap.ACCESS_READ);

哪个与struct的大小相匹配。如果需要,可以先获取大小,然后创建内存映射以匹配它(第二个参数。)