2016-12-08 2 views
0

Je me demande si quelqu'un peut m'aider, j'apprends seulement c et j'essaie de diviser un tableau BYTE appelé c0 [8] en 2 de size [4], puis placez chacun de la taille [4] dans un int non signé. En utilisant uniquement les types donnésDivisez un tableau en deux, puis placez chaque partie dans un entier non signé en utilisant c

J'ai donc

#define WORD32 unsigned int 
#define BYTE unsigned char 

BYTE c0[8]; 
WORD32 FirstHalf, SecondHalf; 

c0[8]; 
+0

Ce n'est pas une tâche significative sans spécifier endianess. – Lundin

Répondre

1

Vous pouvez le faire plusieurs façons, mais gardez à l'esprit l'endianess (mes exemples sont en petit boutiste).

En utilisant memcpy:

memcpy(c0, &FirstHalf, sizeof(WORD32)); 
memcpy(&c0[sizeof(WORD32)], &SecondHalf, sizeof(WORD32)); 

Simple assigment:

FirstHalf = (WORD32) c0[0] | (WORD32) c0[1] << 8 | (WORD32) c[2] << 16 | (WORD32) c[3] << 24; 
SecondHalf = (WORD32) c0[4] | (WORD32) c0[5] << 8 | (WORD32) c[6] << 16 | (WORD32) c[7] << 24; 
+0

Casting - selon la norme conduit à ** comportement indéfini **. – j2ko

0

Essayez ceci:

char array[8] = {1,2,3,4,5,6,7,8}; 
char array1[4]; 
char array2[4]; 
unsigned int number1; 
unsigned int number2; 

memcpy(array1, array, 4); 
memcpy(array2, array + 4, 4); 

number1 = (array1[3] << 24) + (array1[2] << 16) + (array1[1] << 8) + array1[0]; 
number2 = (array2[3] << 24) + (array2[2] << 16) + (array2[1] << 8) + array2[0]; 

Cela dépend un peu sur grand/petit-boutiste mais ..