我需要将存储在int中的十进制数转换为字节数组(也称存储在无符号字符数组中)。
有什么线索吗?
有什么线索吗?
或者如果你知道自己在做什么:
int n = 12345;
char* a = (char*)&n;
最简单的方法 - 使用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 ) );
这可能可行
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]);
}
注意处理与字节序有关的顺序问题
警告:未经测试的代码。
这应该是一种与字节序无关的转换。它从低到高进行。可能有更有效的方法来完成它,但我暂时想不到。
#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;
}
我理解这个问题是将数字转换为字符串表示形式(就像Neil所做的那样)。
以下是一种简单的方法,可以在不使用任何库的情况下完成它。
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,否则你将无法确定你的字节数组的长度)。
memcpy
可能会产生不可预测的行为。 - Zarel