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

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

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里怎么自定义结构体对齐?”解决方法就是打开帮助文档,直接搜索“结构体对齐”[图片]


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

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

登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...