Python 通过socket模块读取到 byte数组,如何转为一个ctypes的结构

norsd 2014-03-17 04:04:38
大家好!
刚入门python 2.7,就遇到一个问题, 简单说就是 从网络读到的字节流怎么转为struct
看了stackoverflow一头雾水

有以下结构:

class TestStruct(Structure):
_fields_=[
("ValueA",c_int),
("StringA",c_char*9)
]


然后网络代码如下:
        sock = socket.socket(socket.AF_INET,
socket.SOCK_DGRAM)
sock.bind((self.__ip,self.__port))
print("Starting Receiving......")
while True:
try:
(data,addr) = sock.recvfrom(1024)
t = cast( data, POINTER(TestStruct))
print t.ValueA
#print(data[0])
#print(type(data))
except Exception,ex:
print ex
break


最后转换变成了类似 class '__main__.LP_TestStruct的东西
...全文
421 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
norsd 2014-03-18
  • 打赏
  • 举报
回复
对,但是这个数据是很多的,每次都用struct去解析,估计速度不行
angel_su 2014-03-17
  • 打赏
  • 举报
回复
既然t是结构体指针,取成员xxx在c里t->xxx或 (*t).xxx,在ctypes里近似后者写法: t.contents.ValueA t.contents.StringA 另外可以看看python自带的struct模块,普通情况下更简单一点,不用特别去写一个类模拟结构...

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧