Robert B.: C Pointerei

Beitrag lesen

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