将二进制字节值从FILE存储到C数组中

时间:2013-12-10 16:40:18

标签: c binary-data

我有一个带十六进制二进制值的文件,我想要的是读取那些值 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

再次感谢你!!

2 个答案:

答案 0 :(得分:1)

由于该文件包含二进制数据,ITAunsigned 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