【发布时间】:2017-01-15 20:25:17
【问题描述】:
我正在尝试一次访问 10 位二进制数据。我认为最好的方法是以 unsigned long long 读取 40 位,然后使用位掩码来访问所需的数据。我的努力似乎读了 64 位,我想知道是否有人能指出我哪里出错了。谢谢。
FILE * pFile;
long lSize;
unsigned long long * buffer;
size_t result;
pFile = fopen ( "test.bin" , "rb" );
if (pFile==NULL) {fputs ("File error",stderr); exit (1);}
fseek (pFile , 0 , SEEK_END);
lSize = (ftell (pFile))/5;
rewind (pFile);
buffer = (unsigned long long*) malloc (sizeof(unsigned long long)*lSize);
if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}
result = fread (buffer,5,lSize,pFile);
if (result != lSize) {fputs ("Reading error",stderr); exit (3);}
当我输出缓冲区 [0] 时,我得到:
0100110111001110101110001110000111011111110001100011100110111011
但我想我会得到类似的东西:
0000000000000000000000001110000111011111110001100011100110111011
【问题讨论】:
-
文件test.bin的实际内容是什么?在一些十六进制编辑器中打开它,比如 HxD(假设你在 Windows 中工作)。
-
用零初始化缓冲区 - 例如使用
calloc。 -
@Dialectus 我刚刚下载了一个十六进制编辑器并检查了内容不匹配。有1011101100111001110001101101111100111001110001101101111111100001
-
“当我输出缓冲区 [0] ...”似乎没有使用标准 C 库函数。你是怎么得到这个输出的?
-
@RadLexus 我用过 cout。
标签: c