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; 4

    Warum 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 😃


Anmelden zum Antworten