将int转换为C中的字节数组?

时间:2010-08-10 09:53:37

标签: c

我需要将存储在int中的十进制数转换为字节数组(也称为存储在unsigned char数组中)。

任何线索?

5 个答案:

答案 0 :(得分:7)

或者如果你知道自己在做什么:

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

答案 1 :(得分:1)

最简单的方法 - 使用sprintf(或snprintf,如果你有的话):

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

或者如果你想将它存储在二进制文件中:

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

答案 2 :(得分:1)

这可行吗

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

照顾依赖于字节顺序的顺序

答案 3 :(得分:0)

警告:未经测试的代码。

这应该是与字节顺序无关的转换。它从低到高。可能有一种更有效的方法,但我现在想不到它。

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

我发布这个主要是因为我没有看到其中的结果不会改变的另一个解决方案,具体取决于处理器的字节顺序。

答案 4 :(得分:0)

我理解将数字转换为字符串表示形式的问题(正如Neil所做的那样)。

以下是一种不使用任何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;}

这个问题可能需要一些澄清,因为其他人显然理解你想要在int的内部表示中使用的底层字节(但是如果你想做那种事情,你最好使用一些定义的固定大小类型而不是一个int,或者您不确定字节数组的长度。)