使用下一个代码:
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的对象,如果煅烧说明它已经是568?
此外,值得一提的是,我一直在谷歌(并检查这)以获得什么是IL3f3f3f512s3f,或者如何创建自己的字符串来读取内存,例如1024,而不是568,但到目前为止,我没有运气。一个详细的答案,关于该部分的结构如何工作,将帮助我,或指出了正确的方向,如何理解如何计算字符串,我需要使用它来解压shmem。
这与这问题有关。
发布于 2017-04-07 19:36:35
您只检查输出中的大小,该大小对内存映射不可用。因此,将第一行更改为:
shmem = mmap.mmap(0, 568, "MumbleLink", mmap.ACCESS_READ);它与结构的大小匹配。如果需要,可以先获得大小,然后创建与其匹配的内存映射(第二个参数)。
https://stackoverflow.com/questions/43285757
复制相似问题