Есть ли способ приведения целочилсенных типов к строке байт, помимо отделения битов с помощью побитовых операций?

Есть ли способо приведения целочисленных типов кстроке байт? Вот как пример, есть число, например максимальное от unsigned long, это 8байт, если я не ошибаюсь, есть ли возможность разложить это число на байты без отделения каждого байта с помощью побитовых операций?


Ответы (1 шт):

Автор решения: Dmitry Safonov

Конечно можно! Для этого специальный тип данных 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 в массиве - вначале старший или вначале младший это машиннозависимо и надо тестировать, но это не точно.

→ Ссылка