我使用下一种方法在C ++中获取数字的字节表示:
template< class T >
union u_value
{
T value;
unsigned char bytes[ sizeof( T ) ];
}
请告诉我这是真的方法吗?如果没有,为什么以及如何获得它?
答案 0 :(得分:3)
没有“真实”的方式。你做的是一种方式来做到这一点。一般来说,不鼓励这样的东西,因为它通常导致不可移植的代码。有时候有很好的理由可以像这样戳戳内部,但是既然你没有告诉你要对“字节表示”做什么,我们就无法判断这种方法是否合适。
修改:因此,网络就是您的主题。在这种情况下,要么:
您只转移POD类型(char,short,int等)。在这种情况下,您可能需要查看<netinet/in.h>
,您可以在其中找到主机htons()
,htonl()
,ntohs()
和ntohl()
- 网络字节顺序,反之亦然。
您正在转移复杂类型(例如类)。在这种情况下,您可能需要查看Boost Serialization,因为此处需要考虑的不仅仅是字节顺序。
无论哪种方式,建议使用现成的,记录完备的和未理解的代码,而不是自己进行字节操作。
答案 1 :(得分:1)
不是真的。这种方式不可移植,通常可能导致未定义的行为。因为,
virtual
函数额外空间不明显(如果T
是多态的)答案 2 :(得分:0)
如果要通过网络传输字节,则需要注意Endianess
答案 3 :(得分:0)
这会奏效。确保下次反序列化时,任何带有虚函数,指针等的东西都不准确。