使用C语言将数据包中某字节转为两个字节的组合

沸羊羊的学习号 2019-05-24 10:00:48
项目中有个需求,数据格式中有头标记字节和尾标记字节,为了避免数据中间出现该标记导致接收提前结束,需要将中间出现的标记字节转换为两字节的组合,请问有什么思路么?使用的C语言,比如将0x7E转换为 0x7D和0x5E的组合
...全文
305 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
a6640002 2020-03-15
  • 打赏
  • 举报
回复
学习了
stherix 2019-05-24
  • 打赏
  • 举报
回复
引用 4 楼 沸羊羊的学习号 的回复:
[quote=引用 3 楼 stherix 的回复:] [quote=引用 2 楼 沸羊羊的学习号 的回复:] [quote=引用 1 楼 stherix 的回复:] 接收方是要把组合转回来的 那数据里原有的0x7D和0x5E组合怎么办 所以单独包头+包尾的模式很多时候并不可行 可以考虑在包头后面加上包长,包尾前也可以考虑加CRC校验,甚至可以不要包尾
对的,这些信息都有的,帧头+帧信息+数据长度+数据+CRC校验+帧尾,规定好的是防止数据部分出现7E,所以转译成7D+5E,接收端再转回来,有啥思路能实现这个么[/quote] 既然有了帧头和长度,那么数据帧什么地方结尾已经知道了,数据部分出现了7E也没关系的 而且,如果数据里面本身就有7D+5E,接收端怎么知道这是7E转换的,还是原来就是7D+5E呢,就没法转换回去了[/quote] 协议规定的就是这样的[/quote] 就按照你的思路吧 比如你的数据包是char * data,长度为len,那么先要遍历一次,查找0x7E的个数count 然后需要新申请长度为len+count的内存 p 然后逐个将原来data里的数据复制过去 如果当前字节是0x7E,那么就往p里写7d,5e 全部结束后data=p 最后有可能的话,释放data的内存
  • 打赏
  • 举报
回复
引用 3 楼 stherix 的回复:
[quote=引用 2 楼 沸羊羊的学习号 的回复:] [quote=引用 1 楼 stherix 的回复:] 接收方是要把组合转回来的 那数据里原有的0x7D和0x5E组合怎么办 所以单独包头+包尾的模式很多时候并不可行 可以考虑在包头后面加上包长,包尾前也可以考虑加CRC校验,甚至可以不要包尾
对的,这些信息都有的,帧头+帧信息+数据长度+数据+CRC校验+帧尾,规定好的是防止数据部分出现7E,所以转译成7D+5E,接收端再转回来,有啥思路能实现这个么[/quote] 既然有了帧头和长度,那么数据帧什么地方结尾已经知道了,数据部分出现了7E也没关系的 而且,如果数据里面本身就有7D+5E,接收端怎么知道这是7E转换的,还是原来就是7D+5E呢,就没法转换回去了[/quote] 协议规定的就是这样的
stherix 2019-05-24
  • 打赏
  • 举报
回复
引用 2 楼 沸羊羊的学习号 的回复:
[quote=引用 1 楼 stherix 的回复:] 接收方是要把组合转回来的 那数据里原有的0x7D和0x5E组合怎么办 所以单独包头+包尾的模式很多时候并不可行 可以考虑在包头后面加上包长,包尾前也可以考虑加CRC校验,甚至可以不要包尾
对的,这些信息都有的,帧头+帧信息+数据长度+数据+CRC校验+帧尾,规定好的是防止数据部分出现7E,所以转译成7D+5E,接收端再转回来,有啥思路能实现这个么[/quote] 既然有了帧头和长度,那么数据帧什么地方结尾已经知道了,数据部分出现了7E也没关系的 而且,如果数据里面本身就有7D+5E,接收端怎么知道这是7E转换的,还是原来就是7D+5E呢,就没法转换回去了
  • 打赏
  • 举报
回复
引用 1 楼 stherix 的回复:
接收方是要把组合转回来的 那数据里原有的0x7D和0x5E组合怎么办 所以单独包头+包尾的模式很多时候并不可行 可以考虑在包头后面加上包长,包尾前也可以考虑加CRC校验,甚至可以不要包尾
对的,这些信息都有的,帧头+帧信息+数据长度+数据+CRC校验+帧尾,规定好的是防止数据部分出现7E,所以转译成7D+5E,接收端再转回来,有啥思路能实现这个么
stherix 2019-05-24
  • 打赏
  • 举报
回复
接收方是要把组合转回来的 那数据里原有的0x7D和0x5E组合怎么办 所以单独包头+包尾的模式很多时候并不可行 可以考虑在包头后面加上包长,包尾前也可以考虑加CRC校验,甚至可以不要包尾
  • 打赏
  • 举报
回复
引用 5 楼 stherix 的回复:
[quote=引用 4 楼 沸羊羊的学习号 的回复:] [quote=引用 3 楼 stherix 的回复:] [quote=引用 2 楼 沸羊羊的学习号 的回复:] [quote=引用 1 楼 stherix 的回复:] 接收方是要把组合转回来的 那数据里原有的0x7D和0x5E组合怎么办 所以单独包头+包尾的模式很多时候并不可行 可以考虑在包头后面加上包长,包尾前也可以考虑加CRC校验,甚至可以不要包尾
对的,这些信息都有的,帧头+帧信息+数据长度+数据+CRC校验+帧尾,规定好的是防止数据部分出现7E,所以转译成7D+5E,接收端再转回来,有啥思路能实现这个么[/quote] 既然有了帧头和长度,那么数据帧什么地方结尾已经知道了,数据部分出现了7E也没关系的 而且,如果数据里面本身就有7D+5E,接收端怎么知道这是7E转换的,还是原来就是7D+5E呢,就没法转换回去了[/quote] 协议规定的就是这样的[/quote] 就按照你的思路吧 比如你的数据包是char * data,长度为len,那么先要遍历一次,查找0x7E的个数count 然后需要新申请长度为len+count的内存 p 然后逐个将原来data里的数据复制过去 如果当前字节是0x7E,那么就往p里写7d,5e 全部结束后data=p 最后有可能的话,释放data的内存[/quote] 好的,非常感谢您

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧