Gerade mal exerziert:
#include <stdio.h>
#include <stdint.h>
#ifdef WIN32
#include <Winsock2.h>
#else
#include <arpa/inet.h>
#endif
const uint16_t ui = 53;
int main(void) {
const uint16_t iu = htons(ui);
printf("%#x %#x\n", ui, iu);
fwrite(&ui, sizeof(ui), 1, stdout);
fwrite(&iu, sizeof(iu), 1, stdout);
return 0;
}
.\endian | xxd
00000000: 3078 3335 2030 7833 3530 300d 0a35 0000 0x35 0x3500..5..
00000010: 35 5
(Ja, unter Windows gerade.) Aber schau dir mal den Teil nach dem Newline an: Da steht einmal 35 00
, das ist deine 53 in Host Byte Order. Und das folgende 00 35
ist der in die Network Byte Order konvertierte Wert. Das funktioniert wie beschrieben.
Viele Grüße
Robert