2010-08-10 9 views

Répondre

1

possible approche la plus simple - utilisation sprintf (ou snprintf, si vous en avez):

unsigned char a[SOMESIZE] 
int n = 1234; 
sprintf(a, "%d", n); 

Ou si vous le voulez stocké en binaire:

unsigned char a[sizeof(int) ]; 
int n = 1234; 
memcpy(a, & n, sizeof(int)); 
+2

Attention: 'memcpy' peut produire un comportement imprévisible si vous ne tiennent pas compte boutisme. – Zarel

+3

@Zarel Les résultats seront entièrement prévisibles, mais peut-être non désirés. –

+0

"Imprévisible" dans le sens où vous ne serez pas en mesure de prédire les résultats à moins de connaître l'endianness du processeur sur lequel vous l'exécutez. – Zarel

0

Attention: code non testé.

Cela devrait être une conversion endianness-agnostic. Il va de bas en haut. Il y a probablement un moyen plus efficace de le faire, mais je ne peux pas y penser pour le moment.

#include <limits.h> // CHAR_BIT, UCHAR_MAX 

int num = 68465; // insert number here 
unsigned char bytes[sizeof(int)]; 
for (int i=0; i<sizeof(int); i++) 
{ 
    bytes[i] = num & UCHAR_MAX; 
    num >>= CHAR_BIT; 
} 

je poste ce surtout parce que je ne vois pas une autre solution ici pour laquelle les résultats ne changent pas en fonction de ce que boutisme votre processeur est.

+0

Mais peut-être que l'utilisateur veut les changer - pour maintenir le même ordre des octets que dans l'int original. En outre, le calcul de la taille et du contrôle de la boucle de votre tableau est incorrect. –

7

Ou si vous savez ce que vous faites:

int n = 12345; 
char* a = (char*)&n; 
0

Je comprends le problème que la conversion d'un numéro à une représentation de chaîne (comme Neil fait).

Ci-dessous est un moyen simple de le faire sans utiliser de lib.

int i = 0; 
int j = 0; 
do {a[i++] = '0'+n%10; n/=10;} while (n); 
a[i--] = 0; 
for (j<i; j++,i--) {int tmp = a[i]; a[i] = a[j]; a[j] = tmp;} 

La question doit sans doute des éclaircissements que d'autres évidemment compris que vous vouliez les octets sous-jacents utilisés dans la représentation interne de int (mais si vous voulez faire ce genre de chose, vous feriez mieux d'utiliser un certain type de taille fixe définie au lieu d'un int, ou vous ne saurez pas avec certitude la longueur de votre tableau d'octets).

1

Cela pourrait fonctionner

int n=1234;  
const int arrayLength=sizeof(int); 
unsigned char *bytePtr=(unsigned char*)&n; 

for(int i=0;i<arrayLength;i++) 
{ 
    printf("[%X]",bytePtr[i]); 
} 

Prenez soin de l'ordre qui dépend de boutisme