数字的字节表示

byte representation of numbers

本文关键字:表示 字节 数字      更新时间:2023-10-16

我使用下面的方法来获得c++中数字的字节表示:

template< class T >
union u_value
{
  T value;
  unsigned char bytes[  sizeof( T ) ];
}

请告诉我这是真的吗?如果没有,为什么,我该怎么得到它?

没有"正确"的方法。你所做的是做这件事的一种方法。一般来说,这样的东西是不鼓励的,因为它通常会导致不可移植的代码。有时候我们有很好的理由像这样戳到内部,但由于你没有告诉你要用"字节表示"做什么,我们几乎无法判断这种方法是否合适。

编辑:所以网络是你这里的主题。在本例中,要么:

  1. 您仅传输POD类型(char, short, int等)。在这种情况下,您可能想要查看<netinet/in.h>,在那里您将找到宏htons()htonl()ntohs()ntohl(),它们执行主机到网络的字节顺序,反之亦然。

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

无论哪种方式,建议使用现成的、文档完备且易于理解的代码,而不是自己做字节杂耍。

不正确。这种方式是不可移植的,并且经常会导致未定义的行为。因为,

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

如果要在网络上传输字节,则需要注意字节序

可以。只要确保下次反序列化时,任何带有虚函数、指针等的内容都不会是准确的。