数字的字节表示

时间:2011-07-15 07:21:34

标签: c++

我使用下一种方法在C ++中获取数字的字节表示:

template< class T >
union u_value
{
  T value;
  unsigned char bytes[  sizeof( T ) ];
}
请告诉我这是真的方法吗?如果没有,为什么以及如何获得它?

4 个答案:

答案 0 :(得分:3)

没有“真实”的方式。你做的是一种方式来做到这一点。一般来说,不鼓励这样的东西,因为它通常导致不可移植的代码。有时候有很好的理由可以像这样戳戳内部,但是既然你没有告诉你要对“字节表示”做什么,我们就无法判断这种方法是否合适。

修改:因此,网络就是您的主题。在这种情况下,要么:

  1. 您只转移POD类型(char,short,int等)。在这种情况下,您可能需要查看<netinet/in.h>,您可以在其中找到主机htons()htonl()ntohs()ntohl() - 网络字节顺序,反之亦然。

  2. 您正在转移复杂类型(例如类)。在这种情况下,您可能需要查看Boost Serialization,因为此处需要考虑的不仅仅是字节顺序。

  3. 无论哪种方式,建议使用现成的,记录完备的和未理解的代码,而不是自己进行字节操作。

答案 1 :(得分:1)

不是真的。这种方式不可移植,通常可能导致未定义的行为。因为,

  1. 忽略填充(由编译器完成)
  2. virtual函数额外空间不明显(如果T是多态的)

答案 2 :(得分:0)

如果要通过网络传输字节,则需要注意Endianess

答案 3 :(得分:0)

这会奏效。确保下次反序列化时,任何带有虚函数,指针等的东西都不准确。