我在做什么:
我试图从.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,但是在代码中,倒数第二个printf打印以下内容:ChunkSize is: 151220 bits
,为什么?谢谢。
最佳答案
但我已将格式指定为%02x,因此它最多应显示2个值的十六进制
这并不意味着,它表示在必要时至少显示2个数字并用0
填充。将参数强制转换为unsigned char
以除去f
数字。
关于c - 不正确的比特流到C中的长转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32445906/