如何正确地将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 

如何需要解决这一问题?

+1

你为什么要使用该投? –

+2

'memcpy'指向真正的'uint32_t',在将其转换为'unsigned'之前。 –

+4

“data”是什么类型? – Galik

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