【发布时间】:2016-05-31 21:19:32
【问题描述】:
有什么安全的方法可以将整数转换为结构吗?
举个例子:
struct Colour
{
uint8_t A;
uint8_t R;
uint8_t G;
uint8_t B;
};
我转换成整数或从整数转换:
uint32_t myInteger
Colour* myColour = reinterpret_cast<Colour*>(&myInteger);
uint32_t* myInteger2 = reinterpret_cast<uint32_t*>(myColour);
如果我的结构被填充了,那么这将不起作用,有什么方法可以保证它起作用吗?
我知道这可能不是标准的,但我更喜欢支持主要编译器(Visual Studio 和 GCC)而不是一些位移解决方法,这里已经回答了:Type casting struct to integer c++。
【问题讨论】:
-
这是未定义的行为。 (即使我们使用
union,它也会是UB。) -
“位移变通办法”是正确的方法
-
非常相关的stackoverflow.com/questions/25734477/… OMG @M.M 那里有你的答案:O
-
这是一些新的 C++ 特性吗?您将 scalar 值(整数类型)转换为 aggregate(结构类型)。
-
修复了代码中的bug(需要添加*/&)。我想问一个关于 SO 的非标准问题有点像在酒吧点牛奶 :)
标签: c++ memory-alignment reinterpret-cast