你如何读取3字节大小的值作为c ++中的整数?

时间:2012-03-27 19:45:41

标签: c++ int byte id3

我正在读取一个id3标签,其中每个帧的大小以3个字节指定。我怎样才能将这个值用作int?

3 个答案:

答案 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);

这应该有效。如果有人觉得不应该使用,请告诉我原因。

干杯! 阿迪亚