C - unsigned int à la conversion de tableau de caractères non signés
J'ai un unsigned int nombre (2 octets) et je veux le convertir en unsigned char type. De ma recherche, je trouve que la plupart des gens vous recommandons d'effectuer les opérations suivantes:
unsigned int x;
...
unsigned char ch = (unsigned char)x;
Est la bonne approche? Je demande parce que unsigned char est de 1 octet et nous avons coulé à partir de 2 octet de données 1 octet.
Pour prévenir toute perte de données, je veux créer un tableau de unsigned char[] et de sauvegarder les octets dans le tableau. Je suis coincé à l'adresse suivante:
unsigned char ch[2];
unsigned int num = 272;
for(i=0; i<2; i++){
//how should the individual bytes from num be saved in ch[0] and ch[1] ??
}
Aussi, comment convertir le unsigned char[2] retour à la unsigned int.
Merci beaucoup.
source d'informationauteur Jake
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
memcpy
dans ce cas:De la même façon, juste inverser les arguments de memcpy.
Comment sur:
L'inverse de l'opération est laissée en exercice.
Comment sur l'utilisation d'un syndicat?
Cela dépend vraiment de votre objectif: pourquoi voulez-vous convertir à un
unsigned char
? Selon la réponse à cela, il ya quelques façons de le faire:Tronquer: c'est Ce qui est recommandé. Si vous êtes juste en train de presser des données dans une fonction qui exige une
unsigned char
tout simplement jetéuchar ch = (uchar)x
(mais, bien sûr, méfiez-vous de ce qui se passe si votre int est trop grand).Spécifiques endian: à Utiliser lorsque votre destination requiert un format spécifique. Habituellement code réseau aime tout converti en big endian des tableaux de caractères:
sera fait.
Machine endian. À utiliser quand il n'y a pas de endianness exigence, et les données ne se fera que sur une seule machine. L'ordre de la matrice de changement au sein des différentes architectures. Les gens l'habitude de prendre soin de ce avec
union
s:avec
memcpy
:ou avec le toujours dangereux de la fonderie simple (ce qui est un comportement indéfini, et s'écrase sur de nombreux systèmes d'):
De cours, tableau de caractères assez grand pour contenir une plus grande valeur doit être aussi grand que cette valeur elle-même.
Ainsi, vous pouvez simplement faire semblant que cette plus grande valeur est un tableau de caractères:
(Une fois que vous comprenez ce qui se passe, il peut être fait sans aucun variables, tout simplement jeter)
Vous avez juste besoin d'extraire ces octets à l'aide de
bitwise & operator
.OxFF
est un masque hexadécimal pour extraire un octet. S'il vous plaît regardez les différentes opérations sur les bits ici - http://www.catonmat.net/blog/low-level-bit-hacks-you-absolutely-must-know/Un exemple de programme est comme suit:
De sortie: