转一个对raw结构体转换的讨论
import console;
MESSAGE_HEAD = class{
byte szHeaderFlag[2]; //包头起始标志,固定为“FT”
int nProtoID = 0; //协议ID
byte nType; //协议格式类型,0为Protobuf格式,1为Json格式
byte nProtoVer; //协议版本
int nSerialNo; //包序列号
int nBodyLen; //包体长度
byte arrBodySHA1[20]; //包体数据的SHA1哈希值
byte arrReserved[8]; //8字节 留空
pointer buf;//包体内容,根据nBodyLen长度读取
}
var buf = '\x46\x54\xe9\x03\x00\x00\x00\x00\xc5\x25\x00\x00\x11\x00\x00\x00\x14\xfe\x55\xd5\xff\x07\x74\x87\x20\xe7\x7f\x26\x47\xb9\x1a\x6a\xc9\x61\x4d\x77\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x0f\x08\xac\x02\x12\x08\x50\x79\x4e\x6f\x72\x6d\x61\x6c\x18\x01';var msghead = MESSAGE_HEAD();
var msg = raw.convert(buf, msghead);
console.log(msg.szHeaderFlag, msg.nProtoID, msg.nType)
console.pause(true);
请教一下,我把buf转换为结构体,nProtoID读取出来的不是我要的那个值
是不是跟结构体对齐有关,我该如何处理。谢谢各位
nProtoID读取出来正确的值应是1001,而代码读取出来的是0
jacen的回答:
一般这种其实算不上是结构体,只是你可以用结构体来解析,就是字节流,协议流一般对齐是1
加上 _struct_aligned = 1 就可以,但普通结构体一般不会这样的,
你这个结构体是哪来的,一般他会有说明的,
好的,c++声明是用对齐1
那就简单了,“怎么才能让nProtoID读取出来正确的值是1001?”就变成了:“aardio里怎么自定义结构体对齐?”解决方法就是打开帮助文档,直接搜索“结构体对齐”[图片]
登录后方可回帖
以上是群里的讨论内容,感觉很有参考意义。