2014-02-12 61 views
0

我有一個變量s,其類型爲size_t,變量buffer的類型爲unsigned char。我希望以網絡順序將buffer中的這個變量保存爲4個字節。 我該怎麼辦?將size_t保存爲無符號字節

+1

確定'size_t'如果寬4個字節的系統上? – alk

+0

這是64位系統..我如何檢查size_t有多寬?我也可以將它保存爲'uint32_t'或任何類型,這對於此目的會更好。 'uint32_t'在64位系統上是4個字節,不是嗎? – MaMu

+2

在64位系統上,我希望'sizeof(size_t)'返回8. – alk

回答

2
char c8[8] = {0}; 
size_t s = 0x1233456789abcdef0, s_be = 0; 

if (4 == sizeof(s)) 
{ 
    s_be = htonl(s); 
} 
else if (8 == sizeof(s)) 
{ 
    s_be = htobe64(s); 
} 
else 
{ 
    assert(0); 
} 

memcpy(c8, &s_be, sizeof(s_be)); 

對於htobe64()看看這裏:https://stackoverflow.com/a/4410728/694576

+0

對於一個迂腐的解決方案,如何'32 == sizeof(s)* CHAR_BIT'或'sizeof(uint32_t)== sizeof(s)'? – chux

2
size_t myvar; 

myvar = htonl(myvar); // For the endian issues 

memcpy(buffer, &myvar, sizeof(size_t)); 
+0

這隻適用於4個字節寬的整數。 – alk

相關問題