如何正确地将uint32_t转换为unsigned
问题描述:
我正在尝试修复一些带地址清理程序的C++代码。 代码说:如何正确地将uint32_t转换为unsigned
unsigned result = *(uint32_t*)data;
而且消毒给出:
runtime error: load of misaligned address 0x6280033f410a for type 'uint32_t', which requires 4 byte alignment
如何需要解决这一问题?
答
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;
+0
非常感谢,'std :: uint32_t u32; std :: memcpy(&u32,data,sizeof u32);'解决了这个问题! – jwijffels
你为什么要使用该投? –
'memcpy'指向真正的'uint32_t',在将其转换为'unsigned'之前。 –
“data”是什么类型? – Galik