htons
-
Hallo,
ich hab mir kein kleines Programm geschrieben um die htons, bzw. htonl Funktionen zu testen. Das ganze sieht folgendermaßen aus:
#include <iostream> #include <netinet/in.h> int main(int argc, char** argv) { uint16_t uint16 = 0x0102; uint32_t uint32 = 0x01020304; unsigned char uchar16[2]; unsigned char uchar32[2]; memcpy(uchar16, &uint16, sizeof(uint16)); memcpy(uchar32, &uint32, sizeof(uint32)); std::cout << std::hex << uint16 << ": " << int(uchar16[0]) << "; " << int(uchar16[1]) << std::endl; std::cout << std::hex << uint32 << ": " << int(uchar32[0]) << "; " << int(uchar32[1]) << "; " << int(uchar32[2]) << "; " << int(uchar32[3]) << std::endl; // Big Endian - Network Byte Order uint16_t big_uint16 = htons(uint16); uint32_t big_uint32 = htonl(uint32); memcpy(uchar16, &big_uint16, sizeof(big_uint16)); memcpy(uchar32, &big_uint32, sizeof(big_uint32)); std::cout << std::hex << big_uint16 << ": " << int(uchar16[0]) << "; " << int(uchar16[1]) << std::endl; std::cout << std::hex << big_uint32 << ": " << int(uchar32[0]) << "; " << int(uchar32[1]) << "; " << int(uchar32[2]) << "; " << int(uchar32[3]) << std::endl; }
Als Ergebnis bekommen ich folgendes:
102: 2; 1
1020304: 4; 3; 2; 1
201: 3; 4
4030201: 1; 2; 3; 4Warum bekomme ich in der dritten Zeile nicht "201: 1; 2" (so erwarte ich es zumindest)???? Ich habe meinen Code schon 1000mal durchgesehen, aber irgendwo mach ich doch einen Fehler, oder???
Gruß, Chris
-
Argh... hat sich erledigt. Ich hab den Wald vor lauter Bäumen nicht gesehen...
-
Wenn ich raten dürfte, würde ich spontan auf eine Bereichsüberschreitung tippen