2014-02-12 59 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

相关问题