2015-10-13 45 views

回答

2

這取決於int大小。如果是32位,請使用htonlntohl。如果它是16位,請使用htonsntohs

如果是64位的,有這個問題並沒有標準的功能,所以你必須推出自己的。下面是一個例子,說明如何以便攜的方式做到這一點(即,不依賴於字節順序):

uint64_t htonll(uint64_t x) 
{ 
    uint64_t result; 
    unsigned char *c; 

    c = (unsigned char *)&result; 
    c[0] = x >> 56; 
    c[1] = (x >> 48) & 0xFF; 
    c[2] = (x >> 40) & 0xFF; 
    c[3] = (x >> 32) & 0xFF; 
    c[4] = (x >> 24) & 0xFF; 
    c[5] = (x >> 16) & 0xFF; 
    c[6] = (x >> 8) & 0xFF; 
    c[7] = x & 0xFF; 
    return result; 
} 

uint64_t ntohll(uint64_t x) 
{ 
    uint64_t result; 
    unsigned char *c; 

    c = (unsigned char *)&x; 
    result = (uint64_t)c[7]; 
    result |= (uint64_t)c[6] << 8; 
    result |= (uint64_t)c[5] << 16; 
    result |= (uint64_t)c[4] << 24; 
    result |= (uint64_t)c[3] << 32; 
    result |= (uint64_t)c[2] << 40; 
    result |= (uint64_t)c[1] << 48; 
    result |= (uint64_t)c[0] << 56; 
    return result; 
}