Rolf B: C Pointerei

Beitrag lesen

Hallo pl,


> printf("%#x", htons(53) ); // 0x3500

Rauskommen muss aber 0x0035

Hast Du das auf einer Big Endian Maschine ausgeführt? Dann müsste 0x0035 herauskommen. Auf eine LE-Maschine ist 0x3500 korrekt. Weil auf einer LE-Maschine 0x3500 als Bytefolge 0x00 0x35 gespeichert wird, was der BE-Bytefolge für 53 entspricht. Wie schon mehrfach gesagt: auf einer BE Maschine sind die hton-Funktionen No-Op Funktionen.

Die Idee ist doch, dass Du in deiner Software aus Effizienzgründen grundsätzlich mit den ints und der endianness arbeitest, die für die Ausführungsmaschine nativ sind. Nur dann, wenn Du eine definierte Endianness brauchst, konvertierst Du. D.h. genau am Rand deines Systems. Und die Implementierung von htons/ntohs ist so gemacht, dass Du nicht wissen musst, ob Du auf einer BE oder LE Maschine bist. Ruf einfach die Funktion auf. Und es passiert das richtige. Sozusagen Polymorphie in der C-Lib.

Rolf

--
sumpsi - posui - clusi