好久不用,對C語言文件操作都有點生疏了,由於工作需要,稍稍的復習一下;
下面的程序用C語言的fread/fwrite來讀取hex文件,並且拷貝,目的是拷貝後的文件需要和源文件不能有任何差異;
// Hex.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include#define SIZE 512 int main(int argc, char* argv[]) { int i = 0; int cnt = 0; int nRet = 0; char buf[SIZE]; FILE *fpr = NULL; FILE *fpw = NULL; if( (fpr=fopen("D:\\LED.hex", "r")) == NULL ) fprintf(stderr, "Open LED.hex error"); if( (fpw=fopen("D:\\test.hex", "w")) == NULL ) fprintf(stderr, "Open test.hex error"); while( (nRet=fread(buf, 1, sizeof(buf), fpr)) != 0 ) { for(i=0; i fread(addr, size, num, fp); //size代表每次讀取的字節數,num代表需要讀取幾塊size這樣的數據;
成功返回讀取到的字節數,失敗返回-1,讀取到達文件末尾返回0;
實驗發現,只要每次讀一個字節,不管你buf的緩沖類型是什麼,都是可以讀取成功的,基本不會出現什麼問題,這個東西熟悉C語言的應該都已經知道了,獻丑了,下面的程序用來對比,nRet用來接收fread讀到的字節數:
// Hex.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include#include #define SIZE 256 int main(int argc, char* argv[]) { int i = 0; int cnt = 0; int nRet = 0; int flag = 1; short buf[SIZE]; FILE *fpr = NULL; FILE *fpw = NULL; if( (fpr=fopen("D:\\LED.hex", "r")) == NULL ) fprintf(stderr, "Open LED.hex error"); if( (fpw=fopen("D:\\test.hex", "w")) == NULL ) fprintf(stderr, "Open test.hex error"); while( (nRet=fread(buf, 1, sizeof(buf), fpr)) != 0 ) { if(flag == 1) { for(i=0; i 注意,兩種方式打印的格式不一樣,因為第一個是char類型,第二個是short類型,但這裡主要是驗證文件是完好的,就不考慮這些了;