结构。python3中的包错误结构错误“:s”的参数必须是bytes obj

2024-04-29 20:36:06 发布

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

我知道以前有人问过这个问题,其中一些建议似乎是关于需要一个b来使字符串变为字节文字。但是,im将十六进制代码作为0x414243传递给函数,以将其另存为ABC。在

def _pack(_data, size):
    numofbytes = size/8
    print("Chars Expected: " + str(numofbytes))
    formatString = "{}s".format(int(numofbytes))
    print("Formatted String:" + formatString)
    struct.pack(formatString,_data)

_pack(0x414243,24)

我不确定要更改什么,我想知道这是否是我如何使用formatstring变量的问题。我希望函数能够从大小计算出传递的数据中有多少个字符,在这种情况下,24位=3字节,因此它格式化3s并传递0x414243来转换成ABC。在

有谁能告诉我如何克服错误吗。在


Tags: 函数字符串代码datasize字节def建议
1条回答
网友
1楼 · 发布于 2024-04-29 20:36:06

正如错误消息所说,struct.pack()需要一组字节,而您给它一个整数。在

如果希望能够将数据作为整数传入,请在打包之前将其转换为字节:

_data = _data.to_bytes(numofbytes, "big")   # or "little", depending on endianness

或者在调用数据时将其作为字节传入:

^{pr2}$

如果有一个包含十六进制的字符串,例如"0x414243",则可以将其转换为整数,然后再转换为字节:

_data = int(_data, 16).to_bytes(numofbytes, "big")    

您可以使用isinstance()允许函数接受以下任何格式:

if isinstance(_data, str):
    _data = int(_data, 16)
if isinstance(_data, int):
    _data = _data.to_bytes(numofbytes, "big")

顺便说一下,如果size不是8的倍数,那么对字节数的计算将产生一个浮点答案。字节的小数是错误的。要解决这个问题:

numofbytes = size // 8 + bool(size % 8)

如果还有剩余的位,+ bool(size % 8)位将在整数除法的结果上加一。在

相关问题 更多 >