数字的字节表示
byte representation of numbers
我使用下面的方法来获得c++中数字的字节表示:
template< class T >
union u_value
{
T value;
unsigned char bytes[ sizeof( T ) ];
}
请告诉我这是真的吗?如果没有,为什么,我该怎么得到它?
没有"正确"的方法。你所做的是做这件事的一种方法。一般来说,这样的东西是不鼓励的,因为它通常会导致不可移植的代码。有时候我们有很好的理由像这样戳到内部,但由于你没有告诉你要用"字节表示"做什么,我们几乎无法判断这种方法是否合适。
编辑:所以网络是你这里的主题。在本例中,要么:
-
您仅传输POD类型(char, short, int等)。在这种情况下,您可能想要查看
<netinet/in.h>
,在那里您将找到宏htons()
、htonl()
、ntohs()
和ntohl()
,它们执行主机到网络的字节顺序,反之亦然。 -
您正在转移复杂类型(例如类)。在这种情况下,您可能需要查看Boost序列化,因为这里要考虑的不仅仅是字节顺序。
无论哪种方式,建议使用现成的、文档完备且易于理解的代码,而不是自己做字节杂耍。
不正确。这种方式是不可移植的,并且经常会导致未定义的行为。因为,
- 填充(由编译器完成)被忽略
-
virtual
函数的额外空间不被明显地注意(如果T
是多态的)
如果要在网络上传输字节,则需要注意字节序
可以。只要确保下次反序列化时,任何带有虚函数、指针等的内容都不会是准确的。
相关文章:
- 是否可以保证按字节的零 int 是零的表示形式?
- 如何获取 BITMAPFILEHEADER 和 BITMAPINFOHEADER 的字节表示形式?
- C++ CUDA:如何将字节表示为字符或字符集?
- 如何在 c++ 中将字节转换为 ASCII 十六进制表示形式?
- 我想发送固定数量的字节来表示可以解析为整数值的数值
- 如何编写一个字节表示为c 中的文件
- 计算表示有符号整数所需的最小字节数
- 如何将一个数字(大于8个字节)从字符阵列转换为其ASCII表示
- 来自向量 c++ 中的字节表示
- std::wstring中ASCII符号的字节表示,具有不同的语言环境
- 变量的字节表示的意外结果
- 使用 uint8_t 或 char 来表示以字节排列的二进制数据更好吗?
- 显示非常大的数字,用字节[]表示
- 在std::向量中表示原始字节的最佳方式
- 如何在Python中表示字节数组
- 表示单个字节中的浮点数
- C++:如何解释图像的字节数组表示
- 如何使用zmq/zeromq从传递给python的字符串表示(字节数组)中获取整数/浮点数
- reinterpret_cast<字符*>(p)或static_cast<字符*>((void*)p))表示字节指针差,哪个更好?
- 表示6字节的MACID