当前位置: 首页 > ds >正文

can通信传输bz2文件损坏解决方法

需求:

利用can传输文本文件,但是传输压缩包文件会显示文件损坏
can通信每次传输8个字节数据

原因:

代码中使用fgets打开文件进行读取传输,fgets适合传输文本信息,读取二进制数据有的字符无法读到,故接收端文件损坏。

解决:

打开文件采用fread函数即可读取二进制,又可读取文本。

代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdint.h>int main(int argc, char* argv[]){FILE* fp[3];char buf[256];size_t bytes_read;size_t size;size_t offset;uint32_t count;char* pbuf = NULL;if(argc < 2){   // 需要两个参数printf("input parameter is less than 2\r\n");return -1;}fp[1] = fopen(argv[1], "rb");   // 二进制形式读取fp[2] = fopen(argv[2], "wb");   // 二进制形式写入if(fp[1] == NULL || fp[2] == NULL){printf("file open error\r\n");return -1;}while((bytes_read = fread(buf, 1, sizeof(buf), fp[1])) > 0){    // fread函数二进制形式读取,每次读取一字节,一共读取256字节/*模拟can通信传输:一次传输8字节*/size = bytes_read;offset = size % 8;count = size / 8 + (offset > 0 ? 1 : 0);pbuf = buf;for(int i = 0; i < count; i ++){if(size - i * 8 >= 8){  // 发送大于fwrite(pbuf, 1, 8, fp[2]);   // 和can通信一样一次传输8字节}else{fwrite(pbuf, 1, size - i * 8, fp[2]);}pbuf += 8;}}printf("cp %s to %s end\r\n", argv[1], argv[2]);return 0;
}

测试:

在这里插入图片描述

http://www.xdnf.cn/news/13309.html

相关文章:

  • Linux字符串占用空间统计方法
  • Supervisor服务监督部署Python+Django应用
  • Docker环境下FileRise私有云盘在飞牛NAS的部署与穿透实践
  • Day10_C语言基础
  • 【黑客与安全】Linux系列命令之进程相关命令
  • 【论文阅读】:Weighted Graph Cuts without Eigenvectors:A Multilevel Approach
  • 如何使用Qwen-VL 2.5进行图像分割
  • 使用Python构建高效词汇表:N-Gram词频统计实战
  • 力扣 1456. 定长子串中元音的最大数目 的多解
  • 图数据在人工智能中的应用场景
  • 苍穹外卖-day03
  • 国防科技大学计算机基础课程笔记02信息编码
  • 基于梯度的中毒攻击
  • vue3+vite项目中使用.env文件环境变量方法
  • React Native 是什么?为什么学它?
  • 非功能需求
  • Axure设计案例之词云图设计
  • bed文件排序
  • 比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
  • 解决ubuntu20.04无法唤醒的问题的一种方法
  • 【Java基础】​​向上转型(Upcasting)和向下转型(Downcasting)
  • Rust 学习笔记:关于共享状态并发的练习题
  • 多模态大语言模型arxiv论文略读(112)
  • 13.10 LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析
  • 在软件开发中正确使用MySQL日期时间类型的深度解析
  • 什么是知识产权管理系统?知识产权管理系统有哪些功能?
  • 公司内网OA办公系统(本地服务器没有公网IP)如何实现异地外网访问?
  • MySQL数据库基础(三)———数据行操作
  • 本地项目push到git
  • 深度学习在微纳光子学中的应用