Как вы читаете в 3-байтовое значение размера как целое число в C ++? - PullRequest
7 голосов
/ 27 марта 2012

Я читаю в теге id3, где размер каждого кадра указан в 3 байта.Как бы я мог использовать это значение как int?

Ответы [ 3 ]

10 голосов
/ 27 марта 2012

Прочитайте каждый байт и затем сложите их вместе в ваш int:

int id3 = byte0 + (byte1 << 8) + (byte2 << 16);

Убедитесь, что учитывает порядок байтов.

6 голосов
/ 27 марта 2012

Считайте байты по отдельности и поместите их в правильные места в 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 использует сетевой (байтовый) порядок байтов - измененный код соответствует.

0 голосов
/ 11 июня 2018

Если ваш процесс требует значительных вычислительных ресурсов и вы хотите сэкономить время (особенно если вы работаете со встроенными системами), я предлагаю использовать 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);

Это должно работать. Если кто-то считает, что это не следует использовать, сообщите мне причину.

Ура! Адитья

...