2017-09-14 4 views
-4

J'essaye de réparer du code C++ avec un désinfectant d'adresse. Le code dit:comment correctement convertir uint32_t en unsigned

unsigned result = *(uint32_t*)data; 

Et le désinfectant pour les mains donne:

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

Comment dois-je résoudre ce problème?

+1

Pourquoi utilisez-vous CAST? –

+2

'memcpy' le pointeur vers un vrai' uint32_t', avant de le convertir en 'unsigned'. –

+4

Quel type est 'data'? – Galik

Répondre

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

Comment dois-je résoudre ce problème?

Vous devez créer un objet aligné (comme une variable), et copier le contenu de l'adresse désaligné:

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

Cela suppose que l'intention de lire sizeof u32 octets de cette adresse et que ces octets sont classés en endianness natif.

comment lancer correctement uint32_t unsigned

conversion implicite devrait être très bien:

unsigned result = u32; 
+0

merci beaucoup, 'std :: uint32_t u32; std :: memcpy (& u32, data, sizeof u32); 'résolu le problème! – jwijffels