Задать вопрос
@art1636203

Массив uint8_t [8] на переменную uint64_t?

массив uint8_t[8] заменять на переменную uint64_t
  • Вопрос задан
  • 615 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
union {
  uint8_t  u8[8];
  uint64_t u64;
} var;

Или
uint8_t var[8];
*((uint64_t *)var);

Или
uint64_t var;
((uint_8 *)&var)[0];
((uint_8 *)&var)[7];
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
EgoRusMarch
@EgoRusMarch
C++ Developer
struct bit_fields
{
    uint64_t field_1 : 8;
    uint64_t field_2 : 8;
    uint64_t field_3 : 8;
    uint64_t field_4 : 8;
    uint64_t field_5 : 8;
    uint64_t field_6 : 8;
    uint64_t field_7 : 8;
    uint64_t field_8 : 8;
};
Ответ написан
Комментировать
@abcd0x00
Собственно, имеется динамический массив uint8_t[8], который нужно заменять на переменную uint64_t, введенную пользователем.

Нужно написать функцию упаковщик. Там есть проблемы с эндианством, ты можешь просто получить неявную логическую ошибку, если не будешь учитывать эндианство. В идеале, нужно приводить всегда к одному эндианству, а для этого надо его сначала определить на данной системе. Вот для этого всего и нужна функция, которая всё правильно определит и запакует. Так просто через union нельзя делать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы