2010-08-10 38 views

cevap

1

olası en basit yaklaşım - kullanım sprintf (veya snprintf, eğer varsa):

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

Yoksa istiyorsanız ikili saklanır:

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

Uyarı bağlıdır düzenin özen işe yarayabilir. – Zarel

+3

@Zarel Sonuçlar tamamen tahmin edilebilir, ancak belki de istenmeyen. –

+0

"Öngörülemez", sonuçları çalıştırmayı başaramayacağınız sürece işlemcinin endianitesini bilmediğiniz sürece. – Zarel

0

Uyarı: denenmemiş kodu.

Bu, bir endianness-agnostic conversion olmalıdır. Alçaktan yükseğe doğru gider. Muhtemelen bunu yapmanın daha etkili bir yolu var, ama şu anda bunu düşünemiyorum. Ben sonuçları işlemci endianness'ın ne bağlı değişiklik olmayan burada başka bir çözüm görmüyorum çünkü

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

çoğunlukla bu post ediyorum.

+0

Ancak, belki de kullanıcı bunları değiştirmek ister - aynı bayt sırasını orijinal int. Ayrıca, dizi boyutlandırma ve döngü kontrol hesaplamanız yanlış. –

7

Yoksa ne yaptığınızı biliyorsanız:

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

I (Neil yaptığı gibi) bir dize gösterimine bir numara dönüştürme olarak sorunu anlamak.

Aşağıda herhangi bir lib kullanmadan yapmanın basit bir yolu vardır. Eğer bu tür şeyler yapmak istiyorsanız diğerleri açıkçası yatan bayt int iç temsilinde kullanılan istedi anlaşılan olarak

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

soru muhtemelen bazı açıklaması gerekiyor (ama daha iyi tanımlanmış bazı sabit boyutlu türü kullanmak istiyorum bir int yerine veya bayt dizininizin uzunluğunu bilmeyeceksiniz). `Memcpy` öngörülemeyen davranışları üretebilir Eğer endian hesap yoksa:

1

Bu

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

endian üzerinde

İlgili konular