python - 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
(不想一个一个分配)?
解决方案
创建一个字节字符串而不是 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)])
推荐阅读
- swiftui - SwiftUI onDrop 没有被调用?
- rust - 通过 rust 运行 mongodump 时没有此类文件或目录错误
- json - 使用带有 JSON 的链接控件 (SwiftUI)
- css - Tailwind 为链接 Laravel 8 创建全局样式
- omnet++ - 如何更改特定节点 mixim (omnet++) 的传输范围
- deep-learning - 在 Pytorch 中估计高斯模型的混合
- flutter - 如何根据 00:00 格式的时间对列表进行排序/排序?
- javascript - 在 Angular 中渲染 Web 组件?
- html - 如果绝对元素的高度是动态的,如何将绝对元素定位在其相对父级的正下方?
- jestjs - 开玩笑测试模拟函数 __mocks__ TypeError: x is not a function