Есть ли способ приведения целочилсенных типов к строке байт, помимо отделения битов с помощью побитовых операций?
Есть ли способо приведения целочисленных типов кстроке байт? Вот как пример, есть число, например максимальное от unsigned long, это 8байт, если я не ошибаюсь, есть ли возможность разложить это число на байты без отделения каждого байта с помощью побитовых операций?
Ответы (1 шт):
Конечно можно! Для этого специальный тип данных union и создавался в Си. Вот пример:
#include <stdio.h>
#include <inttypes.h>
union Data {
uint64_t uint64;
uint8_t uint8[8];
};
typedef union Data Data_t;
int main()
{
char i;
Data_t data;
data.uint64 = -1;
for (i = 0; i < 8; i++) {
printf("%d ", data.uint8[i]);
}
putchar('\n');
return 0;
}
Пояснения по коду:
1) Если беззнаковому присвоить -1, то это приведёт к установке всех битов в 1.
2) После выполнения программы увидим: 255 255 255 255 255 255 255 255 (т.е 8 байтов подряд)
3) Вроде, каким образом хранятся байты в union в массиве - вначале старший или вначале младший это машиннозависимо и надо тестировать, но это не точно.