0

假设说我有字节格式的键和值。我需要将此信息写入文件,然后将其读回以进行重播。最简单的方法是写 len(key)|key|len(value)|value 依此类推。我正在尝试使用 python memoryview 和 struct 编写这个逻辑。

struct 模块中的 pack_into 只接受整数形式的输入。

import sys
from struct import *
from ctypes import *

buf = create_string_buffer(16)
key = b'<some data in hex>'
value = b'<some data in hex>
pack_into("@QQ",buf,0,key,value)
struct.error: required argument is not an integer

我无法找到解决此问题的方法。请帮助我解决问题。

4

2 回答 2

2

你也许可以简单地pickle.dump()使用(key, value)元组。并用pickle.load().

于 2016-12-10T22:56:14.977 回答
0

你不需要ctypesstruct为此。只需以二进制模式打开文件,然后您就可以直接写入和读取字节。

演示:

key = b'\x01\x02\x03\x04\x05\x06\x07\x08'
val = b'\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'
print(key, val)

fname = 'test.dat'
with open(fname, 'wb') as f:
    f.write(key + val)

with open(fname, 'rb') as f:
    key = f.read(8)
    val = f.read(8)

print(key, val)

输出

b'\x01\x02\x03\x04\x05\x06\x07\x08' b'\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'
b'\x01\x02\x03\x04\x05\x06\x07\x08' b'\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'  

test.dat 的十六进制转储

00000000  01 02 03 04 05 06 07 08  f8 f9 fa fb fc fd fe ff  |................|
00000010
于 2016-12-10T09:48:48.773 回答