2017-09-14 58 views
-4

我正在嘗試修復一些帶地址清理程序的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

回答

1
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

相關問題