首页 > 解决方案 > python将字符串转换为字节错误:ValueError:字节太长

问题描述

我有这个带有 cytpes 的 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(不想一个一个分配)?

标签: pythonbytestructurectypes

解决方案


创建一个字节字符串而不是 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)])

推荐阅读