使用下一个代码:
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问题有关。
答案 0 :(得分:1)
您只检查输出中的大小,该大小不适用于您的内存映射。所以将你的第一行改为:
shmem = mmap.mmap(0, 568, "MumbleLink", mmap.ACCESS_READ);
哪个与struct的大小相匹配。如果需要,可以先获取大小,然后创建内存映射以匹配它(第二个参数。)