Was ist eine tragbare Methode zum Konvertieren der Byte-Reihenfolge von Zeichenfolgen in C

Ich versuche, einen Server zu schreiben, der mit jedem Standard-Client kommuniziert, der Socket-Verbindungen herstellen kann (z. B. Telnet-Client).

Es begann als ein Echoserver, der sich natürlich nicht um die Bestellung von Netzwerkbytes kümmern musste.

Ich kenne ntohs, ntohl, htons, htonl-Funktionen. Diese wären für sich genommen großartig, wenn ich 16- oder 32-Bit-Ints übertragen würde oder wenn die Zeichen in der zu sendenden Zeichenfolge Vielfache von 2 oder 4 Bytes wären.

Ich möchte eine Funktion erstellen, die mit folgenden Zeichenfolgen arbeitet:

str_ntoh(char* net_str, char* host_str, int len)
{
    uint32_t* netp, hostp;
    netp = (uint32_t*)&net_str;
    for(i=0; i < len/4; i++){
         hostp[i] = ntoh(netp[i]);
    }
}

Oder etwas ähnliches. Das oben Gesagte setzt voraus, dass die Wortgröße 32 Bit beträgt. Wir können nicht sicher sein, dass die Wortgröße auf dem sendenden Computer nicht 16-Bit oder 64-Bit ist, oder?

Für Client-Programme wie Telnet müssen sie hton * vor dem Senden und ntoh * nach dem Empfangen von Daten verwenden. Richtig?

EDIT: Für die Leute das Ding, weil 1-char ein Byte ist, das Endian-ness egal ist:

int main(void)
{
    uint32_t a = 0x01020304;
    char* c = (char*)&a;
printf("%x %x %x %x\n", c[0], c[1], c[2], c[3]);

}

Führen Sie diesen Codeausschnitt aus. Die Ausgabe für mich ist wie folgt:

$ ./a.out
  4 3 2 1

Diejenigen, die PowerPC-Chipsätze verwenden, sollten "1 2 3 4" erhalten, aber diejenigen, die Intel-Chipsätze verwenden, sollten sehen, was ich oben zum größten Teil erhalten habe.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage