C语言中读取BIN文件

C语言中读取BIN文件,第1张

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烧写工具即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11198316.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存