嗨,我正在使用c阅读二进制文件,如下所示link text
以便从二进制文件读取的所有信息都存储在“char * buffer”中。 我有格式标准,它说其中一行应
format: unsigned char, size: 1 byte
我正在做以下事情:
printf("%x\n", buffer[N]);
但格式说:
,我该怎么办? format: unsigned short, size: 2 bytes
如果我这样做,这是否正确:
printf("%d%d\n", buffer[N], buffer[N+1]);
如果没有,你能告诉我正确的方法吗?
还可以告诉我打印时是否有正确的方法:
char %c
unsigned long %ul
unsigned short %d
unsigned char %x
double %f
long %ld
二进制文件中的所有数据都是小端格式!非常感谢!
答案 0 :(得分:2)
试试printf("%d", (short)(buffer[N] + buffer[N+1]<<8))
。现在请注意,我必须假设缓冲区中的字节顺序具有存储在较低地址的双字节short
的最低有效字节。
我可能写了*(short *)(&buffer[N])
,但是假设N有正确的对齐方式在您的平台上保存short
,并且缓冲区和平台在字节顺序上达成一致。
这实际上只是一个主题非常大的冰山一角。当你徘徊在浮点数值时,潜伏着许多微妙的问题,有些问题确实很不容易。