我不明白结构unp

2024-09-28 20:56:41 发布

您现在位置:Python中文网/ 问答频道 /正文

下一个代码:

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

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

另外,值得一提的是,我一直在google(并检查了This)寻找什么是il3f3f512s3f的答案,或者如何创建自己的字符串来读取例如1024的内存,而不是568的内存,但到目前为止,我没有运气。一个关于struct的这一部分如何工作的详细答案会有所帮助,或者为我指明了如何理解如何计算解包shmem所需的字符串的正确方向。你知道吗

这与This问题有关。你知道吗


Tags: 内存字符串答案代码sizeaccessthisstruct
1条回答
网友
1楼 · 发布于 2024-09-28 20:56:41

只检查输出中的大小,该大小对内存映射不可用。所以把第一行改成:

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

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

相关问题 更多 >