北斗短报文格式协议

北斗短报文格式协议北斗短报文 RDSS 协议 短报文回传位置 CCWAA CCTXA 电文内容需要根据传输方式修改 其中 当传输方式为 2 混合传输 时 表示电文可以同时兼容中文和代码 其中每个中文的编码为 GBK 编码 可由查表所得 查看字符编码 简体中文

大家好,我是讯享网,很高兴认识大家。

北斗短报文RDSS协议

短报文回传位置

$CCWAA


讯享网

$CCTXA

电文内容需要根据传输方式修改,其中,当传输方式为2(混合传输)时,表示电文可以同时兼容中文和代码

其中每个中文的编码为GBK编码,可由查表所得:查看字符编码(简体中文)

例如,汉字 : 经   其对应的GBK编码为:BEAD(十六进制)

将16bit数据BEAD转成混合模式下的电文需要每4bit截取一次数据,分别得到0x0B、0x0E、0x0A、0x0D 

分别将以上4个字节转成字符,最终得到4个字符‘B’、‘E’、‘A’、‘D’

对于代码来说,和上述方法类似,形如float类型的数据40.f

首先将其通过snpritf

转成字符串“40.”

对于上述字符串,对其中每一个字符的ASCII码每4bit截取一次数据,所以’4‘ 对应ASCII为0x34,转成电文则为’34‘

40.→{'0x34','0x30','0x2E','0x34','0x34','0x35','0x36','0x37','0x38'} ->   {'3','4','3','0','2','E','3','4','3','4','3','5','3','6','3','7','3','8'}

 void HexToString(u8 HexIn, char* StrOut) { u8 HighPos = (HexIn >> 4) & 0x0F; // 取高4位 u8 LowPos = HexIn & 0x0F; // 取低4位 if (HighPos <= 0x09) { StrOut[0] = HighPos + '0'; } else if (HighPos >= 0x0A && HighPos <= 0x0F) { StrOut[0] = HighPos + '7'; } if (LowPos <= 0x09) { StrOut[1] = LowPos + '0'; } else if (LowPos >= 0x0A && LowPos <= 0x0F) { StrOut[1] = LowPos + '7'; } } void FloatAscHex2StrHex(float DataIn, char* StrOut, u8* TurnLen) { char StrIn[20] = { 0 }; sprintf(StrIn, "%f", DataIn); u8 Strlen = 0; Strlen = strlen(StrIn); for (u8 i = 0; i < Strlen; i++) { HexToString(StrIn[i], &StrOut[i * 2]); } *TurnLen = 2 * Strlen; }

讯享网

小讯
上一篇 2025-02-09 17:06
下一篇 2025-02-26 18:05

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/18402.html