tugouzhishen 2022-11-17 14:13 采纳率: 88.5%
浏览 48
已结题

C语言读取二进制文件数据保存到二进制文件中完善了一下题干,咋整啊,急

问题遇到的现象和发生背景

思路是整一个结构体,然后先读ocp那十六个字节,里面下标2 3 4 5 6 7是有用的下标二位三位是判断后面tlv总长度,下标四位五位六位七位是判断送出地址和
接收地址的有效就判断有效TlV,然后再把有效tlv的value找出来写进文件
读取二进制文件将文件里的数据有效值写入二进制文件
文件是导出的OCP传输协议+TLV数据。
OCP头中送出地址为0x0401,接受地址为0x2C01的是有效command,其余为废command。
ocp头:
列:00 02 00 07 04 01 2C 01 00 02 39 02 00 00 00 00一个OCP头总共16字节
其中00 07为ocp长度指的是后面所有TLV总长度len为7,00为高位07为低位,04 01 2C 01为送出地址和接收地址,此题OCP有用的字节就这几个
ocp头后面跟着TLV
TLV:00 01 03 01 02 01,其中00 01为tag ,03为length, 01 02 01 为value,length代表value长度,有效command中,TAG为0x0028或者TAG为0x0029的是有效TLV,
其余为无效TLV。
将有效command中的有效TLV中的value部分按顺序保存到tlv.bin当中。

文件中文件的字节序。在windows下如果直接读取2字节或者4字节的变量,得到的数字与预期相反。如果需要转换16位字节序,可以用下面的函数。
static inline short change_endain_16(unsigned short usIn)
{
return ((usIn & 0xFF) << 8) | ((usIn & 0xFF00) >> 8);
}

用代码块功能插入代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法

思路是整一个结构体,然后先读ocp那十六个字节,里面下标2 3 4 5 6 7是有用的下标二位三位是判断后面tlv总长度,下标四位五位六位七位是判断送出地址和接收地址的有效就判断有效TlV,然后再把有效tlv的value找出来写进文件

我想要达到的结果
  • 写回答

4条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-11-17 16:11
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月23日
  • 已采纳回答 11月23日
  • 修改了问题 11月18日
  • 修改了问题 11月18日
  • 展开全部

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同