2010-08-10 51 views

Trả lời

1

đơn giản nhất có thể tiếp cận - sử dụng sprintf (hoặc snprintf, nếu bạn có nó):

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

Hoặc nếu bạn muốn nó được lưu trữ trong hệ nhị phân:

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

Cảnh báo: 'memcpy' có thể sản xuất hành vi không thể đoán trước nếu bạn không chiếm endian. – Zarel

+3

@Zarel Kết quả sẽ hoàn toàn có thể dự đoán được, nhưng có lẽ không mong muốn. –

+0

"Không thể đoán trước" theo nghĩa là bạn sẽ không thể dự đoán kết quả trừ khi bạn biết độ tin cậy của bộ xử lý mà bạn chạy nó. – Zarel

0

Cảnh báo: Mã chưa được kiểm tra.

Đây phải là một chuyển đổi về tính bất khả tri. Nó đi từ thấp đến cao. Có lẽ một cách hiệu quả hơn để làm điều đó, nhưng tôi không thể nghĩ về nó vào lúc này.

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

Tôi đăng chủ yếu vì tôi không thấy giải pháp khác ở đây mà kết quả không thay đổi tùy thuộc vào bộ xử lý của bạn.

+0

Nhưng có lẽ người dùng muốn họ thay đổi - để duy trì thứ tự byte giống như trong int ban đầu. Ngoài ra, phép tính kích thước mảng và kiểm soát vòng lặp của bạn là sai. –

7

Hoặc nếu bạn biết những gì bạn đang làm:

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

Tôi hiểu vấn đề như chuyển đổi một số thành một chuỗi đại diện (như Neil không).

Dưới đây là cách đơn giản để thực hiện mà không cần sử dụng bất kỳ lib nào.

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

Câu hỏi đặt ra có lẽ cần một số giải thích như những người khác rõ ràng là hiểu bạn muốn các byte cơ bản được sử dụng trong trị nội tại của int (nhưng nếu bạn muốn làm điều đó loại điều, bạn nên sử dụng một số loại kích thước cố định được xác định thay vì một int, hoặc bạn sẽ không biết chắc chắn độ dài của mảng byte của bạn).

1

Điều này có thể làm việc

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

Chăm sóc trật tự mà phụ thuộc vào endianness

Các vấn đề liên quan