我有一个带十六进制二进制值的文件,我想要的是读取那些值 2 by 2 逐字节并存储它们成阵列。我的意思是:
我有一个文件(这不是ascii字符串,我需要一个HEX编辑器来打开这个文件)
00B011070000FF
我想要的是:
ITA[0] = 00;
ITA[1] = B0;
ITA[2] = 11;
ITA[3] = 07;
ITA[4] = 00;
ITA[5] = 00;
ITA[6] = FF;
ITA是unsigned int
我该怎么做?
提前致谢。
解决方案:
FILE *pFile = fopen("/ita/hex", "r");
if (!pFile) {
printf("Error abriendo archivo\n");
}
fseek(pFile, 0, SEEK_END);
int size = ftell(pFile);
fseek(pFile, 0, SEEK_SET);
printf("%i\n",size);
unsigned int ITA[size];
for (i = 0; i < size; i++) {
char value;
fread(&value, 1, 1, pFile);
ITA[i] = (unsigned int) value;
}
fclose(pFile);
printf(" ITA is : %X", crcFast2(ITA, size));// crcFAST2 calculates the crc of the hexadecimals
再次感谢你!!
答案 0 :(得分:1)
由于该文件包含二进制数据,ITA
是unsigned int
数组:
#include <stdio.h>
void readBinary(char *const filename, unsigned int *const ITA, const int size) {
FILE *pFile = fopen(filename, "r");
for (int i = 0; i < size; i++) {
char value;
fread(&value, 1, 1, pFile);
ITA[i] = (unsigned int) value;
}
fclose(pFile);
}
在您描述的方案中,参数size
应为7
。
答案 1 :(得分:1)
如果它是二进制文件,那么你可以直接将文件mmap()直接存入内存
请参阅this page我无耻地窃取以下代码的位置
#include <unistd.h>
#include <sys/types.h>
#include <sys/mman.h>
int fd, pagesize;
unsigned char *data; /* NB note char array not unsigned int as requested */
fd = open("foo", O_RDONLY);
pagesize = getpagesize();
data = mmap((caddr_t)0, pagesize, PROT_READ, MAP_SHARED, fd, pagesize);
请注意,八位位组数据将被打包到一个char数组中,这是存储八位位组数据的最佳方式,但不是所请求的
此外:http://www.gnu.org/software/libc/manual/html_node/Memory_002dmapped-I_002fO.html