Ich habe ein c-Programm unten, ich möchte eine 32-Bit-Nachricht in einer bestimmten Reihenfolge senden Eg.0x00000001.Warum sieht die Ausgabe so aus?
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <stdint.h>
struct test
{
uint16_t a;
uint16_t b;
};
int main(int argc, char const *argv[])
{
char buf[4];
struct test* ptr=(struct test*)buf;
ptr->a=0x0000;
ptr->b=0x0001;
printf("%x %x\n",buf[0],buf[1]); //output is 0 0
printf("%x %x\n",buf[2],buf[3]); //output is 1 0
return 0;
}
Dann teste ich es durch Ausdrucken der Werte in Char-Array. Ich habe in den obigen Kommentaren ausgegeben. Sollte der Ausgang nicht 0 0 und 0 1 sein? seit aber [3] ist das letzte Byte? Gibt es etwas, was ich vermisst habe?
Danke!
also wie sieht die Nachricht aus, wenn ich sendto() von socket.h aussende? Es wird 0x00000001 oder 0x00000100 sein? – kun
@cjk: Sie müssen 'htons' zum Senden verwenden, es erspart Ihnen die genaue Endianness für Sie. – Vlad