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