Comment convertir correctement un tableau char non signé en uint32_t
Donc, je suis en train de convertir un tableau de unsigned char
s dans un uint32_t
mais continuer à obtenir des résultats différents à chaque fois:
unsigned char buffer[] = {0x80, 0x00, 0x00, 0x00};;
uint32_t num = (uint32_t*)&buffer;
Maintenant, je reçois cet avertissement:
avertissement: l'initialisation de fait de nombre entier à partir de pointeur sans un casting
Quand je change de num
à *num
je ne reçois pas d'alerte, mais ce n'est pas réellement le problème réel (mise à JOUR: bien, celles-ci pourraient être liées maintenant que j'y pense.), parce que chaque fois que je lance le code, il existe différents résultats. Deuxièmement, les num
une fois qu'il est en fonte correctement, devrait être 128
mais Si j'ai besoin de changer le boutisme de la mémoire tampon j'ai réussi à le faire moi-même, je pense que.
Merci!
source d'informationauteur omninonsense
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé ?
Cette façon, vous contrôlez l'endianness et autres joyeusetés.
C'est vraiment pas bon à jeter un
char
pointeur et de l'interpréter comme quelque chose de plus grand. Certaines machines s'attendre à des pointeurs vers des entiers pour être aligné.cnicutar la réponse est le meilleur en supposant que vous voulez un particulier fixe boutisme. Si vous voulez hôte-boutiste", essayez:
ou appliquer
ntohl
à cnicutar de réponse. Toute méthode basée sur le type de beaucoup les jeux de mots est faux et dangereux.Tout d'abord, vous voulez dire
num = *(uint32_t *)&buffer
De changer l'endianness, vous pouvez utiliser un appel comme bswap_32 (sous linux, byteswap.h) ou OSSwapInt64 (dans osx, libkern/OSByteOrder.h)
Emprunt de @M. R. ci-dessus, mon approche pour la conversion d'un 3 octets big endian unsigned char tableau au sein d'une structure à une little endian unsigned int...