转一个对raw结构体转换的讨论

By admin at 2018-08-02 • 0人收藏 • 242人看过

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


校长的回答:

一般这种其实算不上是结构体,只是你可以用结构体来解析,就是字节流,协议流一般对齐是1

加上 _struct_aligned = 1 就可以,但普通结构体一般不会这样的,

你这个结构体是哪来的,一般他会有说明的,


好的,c++声明是用对齐1


那就简单了,“怎么才能让nProtoID读取出来正确的值是1001?”就变成了:“aardio里怎么自定义结构体对齐?”解决方法就是打开帮助文档,直接搜索“结构体对齐”[图片]


1 个回复 | 最后更新于 2018-08-02
2018-08-02   #1

以上是群里的讨论内容,感觉很有参考意义。

登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前正在学aardio+halcon机器视觉.
本 站 主 站:Stm32cube中文网
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
黑猫Aar教程网:简码编程
C大Aardio论坛:Aar爱好者论坛
AARDIO语言QQ群:70517368
赞助商:才仁机械
下载站:非凡软件站
Loading...