In Ihrer Frage haben Sie angegeben, dass Sie eine Benutzereingabe von 175 in konvertieren möchten. Dies
00000000 00000000 00000000 10101111ist eine Big-Endian- Bytereihenfolge, die auch als Netzwerkbyte-Reihenfolge bezeichnet wird .
Eine meist portable Möglichkeit, Ihre vorzeichenlose Ganzzahl in ein vorzeichenloses Big-Endian-Zeichen-Array zu konvertieren, wie Sie aus dem von Ihnen angegebenen Beispiel "175" vorgeschlagen haben, besteht darin, die htonl()Funktion von C (im Header <arpa/inet.h>auf Linux-Systemen definiert) zu verwenden, um Ihr vorzeichenloses int in zu konvertieren Big-Endian-Bytereihenfolge, dann verwenden Sie memcpy()(definiert im Header <string.h>für C, <cstring>für C ++), um die Bytes in Ihr char-Array (oder vorzeichenloses char-Array) zu kopieren.
Die htonl()Funktion verwendet eine vorzeichenlose 32-Bit-Ganzzahl als Argument (im Gegensatz zu htons()einer vorzeichenlosen 16-Bit-Ganzzahl) und konvertiert sie in die Netzwerkbyte-Reihenfolge aus der Host-Byte-Reihenfolge (daher das Akronym Host TO Network Long,). versus Host TO Network Short for htons), wobei das Ergebnis als vorzeichenlose 32-Bit-Ganzzahl zurückgegeben wird. Der Zweck dieser Funktionsfamilie besteht darin, sicherzustellen, dass die gesamte Netzwerkkommunikation in der Big-Endian-Bytereihenfolge erfolgt, sodass alle Maschinen über einen Socket ohne Probleme mit der Bytereihenfolge miteinander kommunizieren können. (Nebenbei bemerkt, für Big-Endian - Maschinen, die htonl(), htons(), ntohl()undntohs() Funktionen werden im Allgemeinen nur als "no op" kompiliert, da die Bytes nicht umgedreht werden müssen, bevor sie gesendet oder von einem Socket empfangen werden, da sie bereits in der richtigen Bytereihenfolge vorliegen.
Hier ist der Code:
#include <stdio.h>
#include <arpa/inet.h>
#include <string.h>
int main() {
unsigned int number = 175;
unsigned int number2 = htonl(number);
char numberStr[4];
memcpy(numberStr, &number2, 4);
printf("%x %x %x %x\n", numberStr[0], numberStr[1], numberStr[2], numberStr[3]);
return 0;
}
Beachten Sie, dass Sie, wie im Café erwähnt, die Zeichen mit dem Formatbezeichner von printf als vorzeichenlose Zeichen drucken müssen %x.
Der obige Code wird 0 0 0 afauf meinem Computer gedruckt (einem x86_64-Computer, der eine kleine Endian-Bytereihenfolge verwendet), der für 175 hexadezimal ist.