我正在读取一个id3标签,其中每个帧的大小以3个字节指定。我怎样才能将这个值用作int?
答案 0 :(得分:10)
读取每个字节,然后将它们放在int
:
int id3 = byte0 + (byte1 << 8) + (byte2 << 16);
请务必考虑字节顺序。
答案 1 :(得分:6)
单独读取字节,并将它们放入int:
中的正确位置int value = 0;
unsigned char byte1 = fgetc(ID3file);
unsigned char byte2 = fgetc(ID3file);
unsigned char byte3 = fgetc(ID3file);
value = (byte1 << 16) | (byte2 << 8) | byte3;
编辑:似乎ID3使用网络(大端)字节顺序 - 更改的代码匹配。
答案 2 :(得分:0)
如果你的进程是计算密集型的,并且你想节省时间(特别是如果你在做嵌入式系统),我的建议是使用union / struct。这消除了左移和右移的负荷。
union{
unsigned int ui32;
struct{
unsigned char ll;
unsigned char lh;
unsigned char hl;
unsigned char hh;
}splitter;
}combine;
combine.splitter.ll = 0x78;
combine.splitter.lh = 0x56;
combine.splitter.hl = 0x34;
combine.splitter.hh = 0x12;
printf("This is the combined Value: %d", combine.ui32);
这应该有效。如果有人觉得不应该使用,请告诉我原因。
干杯! 阿迪亚