Преобразовать int в массив байтов в C?

Мне нужно преобразовать десятичное число, хранящееся в int, в массив байтов (также известный как массив без знака char).

Любые подсказки?

5 ответов

Или, если вы знаете, что делаете:

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
<p>Позаботьтесь о порядке, который зависит от сущности</p>


Предупреждение: непроверенный код.

Это должно быть преобразование, основанное на энтитантности. Он идет от низкого к высокому. Вероятно, есть более эффективный способ сделать это, но я не могу думать об этом в данный момент.

#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;
}
</sizeof(int);></limits.h>

Я публикую это в основном потому, что я не вижу другого решения здесь, для которого результаты не изменяются в зависимости от того, какая спецификация вашего процессора.


Я понимаю проблему как преобразование числа в строковое представление (как это делает Нейл).

Ниже приведен простой способ сделать это, не используя lib.

int i = 0;
int j = 0;
do {a[i++] = '0'+n%10; n/=10;} while (n);
a[i--] = 0;
for (j
<p>Вопрос, вероятно, нуждается в некотором разъяснении, поскольку другие, очевидно, понимали, что вам нужны базовые байты, используемые во внутреннем представлении int (но если вы хотите сделать что-то подобное, лучше использовать определенный тип фиксированного размера, int, или вы точно не знаете длину массива байтов).</p>

licensed under cc by-sa 3.0 with attribution.