对端是c写的服务器, 接受的数据结构是一个嵌套的数据结构
typedef struct HeadTag {
unsgined short length;
unsigned short dwId;
} HeadT;
typedef struct MsgTag {
HeadT head;
int content Id;
char name[6];
} MsgT
对于这种嵌套的结构如何进行数据打包?
我原本想通过struct.pack打包head数据, 然后再将head数据打包到msg中, 但是好像没法用:
Head = struct.pack('HH', 1, 2)
msg = struct.pack('4si10s', Head, 19, "abcdef")
但是报错:
struct.error: argument for 's' must be a string
想问问除了将嵌套的结构展平,还有没有别的办法? 感觉如果结构很大的话, 嵌套展平太不友好了
7 个解决方案
#1
socket只能发string数据,数据包是不知道你的数据到底是什么类型的,所以你得用能正确恢复数据结构的string发你的数据。一般我使用JSON发数据,好检查,便于恢复。当然,我做的soket作品只是玩具。仅供参考。说错请纠正。
#2
import struct
def display(s):
b = bytearray(s)
for i in b:
print "%02x" % i,
Head = struct.pack('HH', 1, 2)
display(Head)
msg = struct.pack('4si10s', Head, 19, "abcdef")
display(msg)
#3
了解了下struct,怎么感觉你什么都懂啊?看来有问题要先找你,以前我问了很多人,有没有办法发指定数据结构的数据,都说要自己写,so,只好用了JSON。顺便请教个问题,qt中linux和win QDateTimeEdit 显示的时间格式不一致,有没有办法让这两个时间显示格式统一?昨天换系统,出现了bug
#4
早上过来按照你的例子试过,可以了, 昨天晚上的问题重现不出来... 晕
谢谢回复!
#5
谢谢你提供的思路。
#6
早上过来按照你的例子试过,可以了, 昨天晚上的问题重现不出来... 晕
#7
为什么我已经结贴给分了,帖子上两位的得分还是0?...
#1
用struct.pack进行数据打包并发送至网络
对端是c写的服务器, 接受的数据结构是一个嵌套的数据结构
typedef struct HeadTag {
unsgined short length;
unsigned short dwId;
} HeadT;
typedef struct MsgTag {
HeadT head;
int content Id;
char name[6];
} MsgT
对于这种嵌套的结构如何进行数据打包?
我原本想通过struct.pack打包head数据, 然后再将head数据打包到msg中, 但是好像没法用:
Head = struct.pack('HH', 1, 2)
msg = struct.pack('4si10s', Head, 19, "abcdef")
但是报错:
struct.error: argument for 's' must be a string
想问问除了将嵌套的结构展平,还有没有别的办法? 感觉如果结构很大的话, 嵌套展平太不友好了
#2
import struct
def display(s):
b = bytearray(s)
for i in b:
print "%02x" % i,
Head = struct.pack('HH', 1, 2)
display(Head)
msg = struct.pack('4si10s', Head, 19, "abcdef")
display(msg)
#3
import struct
def display(s):
b = bytearray(s)
for i in b:
print "%02x" % i,
Head = struct.pack('HH', 1, 2)
display(Head)
msg = struct.pack('4si10s', Head, 19, "abcdef")
display(msg)
#4
import struct
def display(s):
b = bytearray(s)
for i in b:
print "%02x" % i,
Head = struct.pack('HH', 1, 2)
display(Head)
msg = struct.pack('4si10s', Head, 19, "abcdef")
display(msg)
早上过来按照你的例子试过,可以了, 昨天晚上的问题重现不出来... 晕
谢谢回复!
#5
socket只能发string数据,数据包是不知道你的数据到底是什么类型的,所以你得用能正确恢复数据结构的string发你的数据。一般我使用JSON发数据,好检查,便于恢复。当然,我做的soket作品只是玩具。仅供参考。说错请纠正。
用struct.pack进行数据打包并发送至网络
对端是c写的服务器, 接受的数据结构是一个嵌套的数据结构
typedef struct HeadTag {
unsgined short length;
unsigned short dwId;
} HeadT;
typedef struct MsgTag {
HeadT head;
int content Id;
char name[6];
} MsgT
对于这种嵌套的结构如何进行数据打包?
我原本想通过struct.pack打包head数据, 然后再将head数据打包到msg中, 但是好像没法用:
Head = struct.pack('HH', 1, 2)
msg = struct.pack('4si10s', Head, 19, "abcdef")
但是报错:
struct.error: argument for 's' must be a string
想问问除了将嵌套的结构展平,还有没有别的办法? 感觉如果结构很大的话, 嵌套展平太不友好了
谢谢你提供的思路。
#6
早上过来按照你的例子试过,可以了, 昨天晚上的问题重现不出来... 晕
#7
为什么我已经结贴给分了,帖子上两位的得分还是0?...