Sono nuovo, quindi inizierò dicendo che mentre guardavo un po 'di codice mi sono reso conto che questa funzione non ha alcun senso per me.Conversione di char unsigned in int e short
Come si può notare, questa funzione specifica utilizza operatori bit a bit per convertire 4 elementi char senza segno in intero.
// Converte un array di quattro caratteri in un numero intero, tramite il modulo little endian
int toInt(const char* bytes) {
return (int)(((unsigned char)bytes[3] << 24) |
((unsigned char)bytes[2] << 16) |
((unsigned char)bytes[1] << 8) |
(unsigned char)bytes[0]);
}
short toShort(const char* bytes) {
return (short)(((unsigned char)bytes[1] << 8) |
(unsigned char)bytes[0]);
}
so già come operatori bit a bit e come char utilizza 1 byte e int utilizza 4 byte. Perché spostare i bit del char a 24 bit a sinistra e non solo convertirlo in modo esplicito in int convertirlo in un int? Perché sono necessari operatori bit a bit per questa funzione?
Questa funzione va oltre la mia comprensione, spiegare questo codice e come funziona o almeno darmi un collegamento che lo spieghi in modo approfondito.
Ho cercato ovunque la spiegazione ma non ho trovato.
Questo probabilmente ha una spiegazione abbastanza semplice.
Uso operatore << su un tipo di lunghezza inferiore int promuove automaticamente l'input per un int. Il cast finale int non è necessario. –