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