我在做什么:
我正在尝试从.wav文件中读取Byte-By-Byte并尝试显示有关文件中存在的标头的一些信息。 (对于我的项目工作)。
我的代码(小部分): -
#include<stdio.h>
void main()
{
char a[4],temp[4],i,j;
int test;
long value=0;
FILE *file;
file=fopen("hellomono.wav","rb");
//
//4 bytes - chunkID @ "RIFF"
fread(a,4,1,file);
printf("ChunkID is: %s\n", a);
//4 bytes - ChunkSize
fread(a,4,1,file);
for (i=0;i<4;i++) value=value+((long)a[i]<<(8*i));
printf("ChunkSize is: %ld bits \n", value);
printf("%02x:%02x:%02x:%02x\n",a[0],a[1],a[2],a[3] );
value=0;
}
我的问题: -
现在,由于 ChunkSize 的大小为4字节且采用小端格式,我将其转换为long值以打印正确的值。
带有十六进制输出的printf
语句显示:ffffffb4:4f:02:00
但我已将格式指定为%02x
,因此它应显示最多为2的十六进制值,这对于4f:02:00
部分有用但第一部分ffffffb4
并非如此。为什么呢?
我们假设4字节读取是小端的b4:4f:02:00
,大端的0x00024FB4
, 151476 ,但在代码中,第2个最后的printf打印以下内容:ChunkSize is: 151220 bits
,为什么?
谢谢。
答案 0 :(得分:1)
但我已将格式指定为%02x,因此它应显示最多2个值的十六进制
这并不意味着,这意味着如果需要,它会显示至少2位用0
填充的数字。将参数转换为unsigned char
以摆脱f
数字。