1、使用fopen、fread、fwrite等C语言标准库中的文件I/O函数即可对文件进行打开、读取、写入 *** 作。下面的程序创建一个.bin的文件,然后再从里面读取数据。
#include <stdio.h>int main()
{
FILE* pFile
float buffer[] = { 2.0 , 3.0 , 8.0 }
pFile = fopen("myfile.bin" , "wb") // 打开文件写 *** 作
fwrite(buffer , 1 , sizeof(buffer) , pFile) // 把浮点数组写到文件 myfile.bin
fclose(pFile) // 关闭文件
float read[3]
pFile = fopen("myfile.bin" , "rb") // 重新打开文件读 *** 作
fread(read , 1 , sizeof(read) , pFile) // 从文件中读数据
printf("%f\t%f\t%f\n", read[0], read[1], read[2])
fclose(pFile) // 关闭文件
return 0
}
2、bin文件一般是指的二进制文件,它往往具有两种形式,一种是某种系统平台的可执行文件格式,比如windows平台的PE文件格式,Linux平台的ELF文件格式,另外一种是提取的一段二进制代码,比如系统的主引导记录mbr,就是一个包含512个字节的程序,用c语言对这类文件进行读取时,必须按一定格式进行解析。而且常用的方法不是使用C语言的I/O *** 作,而一般使用系统提供的文件内存映射方法。
bin文件打开方法如下:1、首先打开此电脑,点击查看,勾选文件扩展名。
2、右键点击bin文件,选择重命名,修改文件后缀,尝试txt、jpg、zip、pdf等常见格式。
3、系统提示改变扩展名可能导致文件不可用,点击是,然后打开文件,如果不能打开或打开为乱码,代表未找到正确格式。
4、继续修改后缀名称尝试打开,当后缀正确时即可打开。
具体思路如下。
一、上位机实现
1、要能根据APP文件生成boot_data文件;
2、如果考虑加密,可以具有一些加密功能。
bin文件读写:出处https://blog.csdn.net/weixin_42287851/article/details/103759331
方法1:
(1)写bin文件
#include <iostream>
#include <fstream>
int main(){
float data[224*224*3]
for(int i=0i<224*224*3++i){
data[i] = i/2.0
}
// save
FILE *fp = fopen("test.bin", "w")
fwrite(data, sizeof(float), sizeof(data), fp)
fclose(fp)
return 0
}
(2)读bin文件
#include <iostream>
#include <fstream>
int main(){
float* data = new float[3*224*224]
//read
std::ifstream inF("test.bin", std::ios::binary)
inF.read((char*)data, sizeof(float) * (3*224*224))
inF.close()
std::cout <<"read bin file" <<std::endl
for(int i=0i<10i++){
std::cout <<i <<": "<<data[i] <<std::endl
}
for(int i=224*224*3-10i<224*224*3i++){
std::cout <<i <<": "<<data[i] <<std::endl
}
return 0
}
方法2:
(1)写bin文件
#include <iostream>
#include <fstream>
int main(){
float data[224*224*3]
for(int i=0i<224*224*3++i){
data[i] = i/2.0
}
// save
std::ofstream outF("test2.bin", std::ios::binary)
outF.write(reinterpret_cast<char*>(data), sizeof(data))
outF.close()
return 0
}
(2)读bin文件
#include <iostream>
#include <fstream>
int main(){
float* data = new float[3*224*224]
//read
std::ifstream inF("test2.bin", std::ios::binary)
inF.read(reinterpret_cast<char*>(data), sizeof(float) * (3*224*224))
inF.close()
std::cout <<"read bin file" <<std::endl
for(int i=0i<10i++){
std::cout <<i <<": "<<data[i] <<std::endl
}
for(int i=224*224*3-10i<224*224*3i++){
std::cout <<i <<": "<<data[i] <<std::endl
}
return 0
}
二、下位机实现
1、boot实现
具体实现过程不说了,这里说下注意点,起始地址和大小设置好,然后编译输出bootBin文件。
2、APP实现
具体实现过程不说了,这里说下注意点,起始地址和大小设置好,然后编译输出APPBin文件。
3、用上位机生成bootConfig文件
上面是从Flash读出的配置,下面是生成的配置。
4、合成bin
1)打开 J-Flash,File->open data file,输入boot地址;
2)打开File->merge data file,输入配置地址;
3)打开File->merge data file,输入APP地址;
4)打开File->save data file as,选择HEX格式;
5)用HEX烧写工具即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)