2010-08-10 23 views

Respuesta

1

más simple posible enfoque - sprintf uso (o snprintf, si lo tiene):

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

O si quieres que almacenó en binario:

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

Advertencia: 'memcpy' puede producir un comportamiento impredecible si no dan cuenta de orden de bytes. – Zarel

+3

@Zarel Los resultados serán completamente predecibles, pero quizás no deseados. –

+0

"Imprevisible" en el sentido de que no podrá predecir los resultados a menos que sepa la endianidad del procesador en el que lo ejecuta. – Zarel

0

Advertencia: código no probado.

Esto debería ser una conversión independiente del endianness. Va de bajo a alto. Probablemente haya una manera más eficiente de hacerlo, pero no puedo pensar en eso en este momento.

#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; 
} 

Quiero poner esta todo porque no veo otra solución a este problema para los que los resultados no cambian dependiendo de lo que su procesador es Endianness.

+0

Pero quizás el usuario quiera que cambien, para mantener el mismo orden de bytes que en el int original. Además, su cálculo de matriz y control de bucle es incorrecto. –

7

O si usted sabe lo que está haciendo:

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

que entiende el problema como la conversión de un número a una representación de cadena (como lo hace Neil).

A continuación se muestra una forma sencilla de hacerlo sin usar ninguna 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 pregunta probablemente necesita alguna aclaración, obviamente, como otros entienden que quería que los bytes que se han empleado en la representación interna de int (pero si usted quiere hacer ese tipo de cosas, es mejor utilizar algún tipo de tamaño fijo definido en lugar de un int, o no sabrás a ciencia cierta la longitud de tu matriz de bytes).

1

Esto podría funcionar

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]); 
} 

Cuida de orden que depende de endianness

Cuestiones relacionadas