python将字符串转换为字节错误:ValueError:字节太长



我有一个带有cytypes的Structure类的定义,它将通过套接字发送:

import ctypes
class MyStructure(Structure):
_pack_ = 1
_fields_ = [("field1", c_int),
("field2", c_longlong),
("data", c_char * 1000)]

和以下代码:

st = MyStructure()
strlist = str([i % 256 in range(1000)]) // 0,1,2,3,...
st.data = str.encode(strlist) // exception

最后一行引发异常:

ValueError:字节太长(3000,最大长度1000(

通过部分字符串可以解决问题,但我不明白错误的原因:

st.data = str.encode(strlist)[:1000] // OK

此外,我想知道哪种转换最直接地转换为大的"字节"类型变量,如st.data(不想逐个赋值(?

正如Jon Clements在第一条评论中提到的,将字符串列表转换为int将任何int值转换为三个字符-值、逗号和空格。例如,将这个int列表intlist = [5, ]转换为字符串列表strlist = str(intlist)将生成len(strlist)作为3!

将数据插入"字节"类型的另一种方法可能是:

st.data = b''
for i in range(1000):
st.data += (i % 256).to_bytes(1, "little")

创建一个字节字符串而不是Unicode字符串:

from ctypes import *
class MyStructure(Structure):
_pack_ = 1
_fields_ = [("field1", c_int),
("field2", c_longlong),
("data", c_char * 1000)]
st = MyStructure()
st.data = bytes([i % 256 for i in range(1000)])

相关内容

最新更新