Hallo, der AVR-GCC ist ja Big endian.
Also mal angenommen ich habe ein char Array aus 4 Byte, welches an
höchster Stelle das höchstwertigste Byte hat, also big endian. Dann kann
man ja sehr schön an die 4 Byte Variable kommen die dieses Array
repräsentiert.
Beispiel:
1 | unsigned char array[4] = {1,2,3,4};
|
2 | unsigned long int zahl;
|
3 | void *vptr =& array[0];
|
4 | zahl = *(unsigned long int*)vptr;
|
Jetzt ist zahl = 67305985. Das geht aber doch nur weil der AVR-GCC auch
big endian ist richtig? Also ist die Variable zahl big endian und das
array auch, deshalb klappt das ja?
Als Schiebeoperation würde das ganze ja so aussehen:
1 | unsigned char array[4] = {1,2,3,4};
|
2 | unsigned long int zahl;
|
3 |
|
4 | zahl = array[3];
|
5 | zahl <<=8;
|
6 | zahl |= array[2];
|
7 | zahl <<=8;
|
8 | zahl |= array[1];
|
9 | zahl <<=8;
|
10 | zahl |= array[0];
|
Sehe ich das richtig, dass jetzt bei der Schiebeoperation die interne
Byteorder von zahl egal ist? Könnte das jemand bestätigen?
Danke schonmal
Viele Grüße
Daniel