如何正确地将uint32_t转换为unsigned

时间:2017-09-14 21:43:17

标签: c++ c++11 ubsan address-sanitizer

我试图用地址清理程序修复一些C ++代码。 代码说:

unsigned result = *(uint32_t*)data;

消毒剂给出了:

runtime error: load of misaligned address 0x6280033f410a for type 'uint32_t', which requires 4 byte alignment

我如何解决此问题?

1 个答案:

答案 0 :(得分:0)

load of misaligned address 0x6280033f410a for type 'uint32_t' ...
     

我如何解决此问题?

您需要创建一个对齐的对象(例如变量),并从未对齐的地址复制内容:

std::uint32_t u32;
std::memcpy(&u32, data, sizeof u32);

这假设您打算从该地址读取sizeof u32个字节,并且这些字节以本机字节顺序排序。

  

如何正确地将uint32_t转换为无符号

隐式转换应该没问题:

unsigned result = u32;