Sto leggendo un tag ID3 in cui la dimensione di ciascun frame è specificata in 3 byte. Come potrei essere in grado di utilizzare questo valore come un int?Come si legge in un valore di dimensione di 3 byte come numero intero in C++?
risposta
leggere ogni byte e poi metterli insieme nel vostro int
:
int id3 = byte0 + (byte1 << 8) + (byte2 << 16);
Assicurati di prendere in considerazione endianness.
'+' o '|'? [..] – Muggen
Non importa, sono uguali in questo caso. –
Eccellente, grazie – carboncomputed
Leggi i byte in individualmente, e metterli nel posto giusto in un 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;
Edit: sembra che ID3 utilizza ordine di byte di rete (big-endian) - ha cambiato il codice da abbinare.
Questo presuppone che' char' sia unsigned ... (Inoltre, 'fgetc' restituisce un' int'!) –
@OliCharlesworth: fgetc restituisce un int, ma gli unici valori che possono essere negativi (come un int) sono cose come EOF (che sto ignorando per il momento). –
Probabilmente il popolo C++ lo detesta per l'uso di 'fgetc()', ma io sono con Jerry. –
Cosa significa "lettura"? Dalla memoria? Da un file? –
In C è possibile utilizzare qualcosa chiamato campo bit digitato come int che occupa 3 byte = 3 * 8 = 24 bit. In C, questo è denotato da 'int int_3byte: 24' (all'interno di una struct). Suppongo che C++ abbia un meccanismo equivalente per questo. – phimuemue
Si prega di non utilizzare un campo bit. –