wenn i2c_get_byte() als
1 | unsigned char i2c_get_byte(...);
|
vereinbart ist, wird erst mal mit Bytes gerechnet, und die sind nunmal
acht Bit breit.
Wenn du jetzt
1 | (i2c_get_byte(true) << 8)
|
machst, rechnen wir immer noch mit den 8-Bit breiten Bytes, aber du
schiebst quasi mit "<<8" bis hin zur 16. Stelle nach links, und das geht
beim Byte eben nicht.
Lösung: Zwing dem Compiler was Breiteres auf (Casting):
1 | unsigned long int file_size =
|
2 | ((unsigned long int) i2c_get_byte(true) +
|
3 | ((unsigned long int) i2c_get_byte(true) << 8) +
|
4 | ((unsigned long int) i2c_get_byte(true) << 16)) +
|
5 | ((unsigned long int) i2c_get_byte(false) << 24);
|