@hasound

Как извлечь элементы многобайтового массива как единое число?

Добрый день.

Есть динамический массив из 9 эелементов типа char. Нулевой элемент - служебный, а элементы с 1 по 8 представляют сообй единое число типа unsigned long long. Могу ли я как-то преобразовать указатель на 1 элемент массива в указатель на ULL, чтобы извлечь следующие 8 байт как число ULL?

Спасибо.
  • Вопрос задан
  • 139 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Лучше так делать не надо. Это UB - нарушение всяких strict aliasing, выравниваия и вообще от порядка байт в машине зависит. Лучше руками собрать ULL по частям, вроде
for (int i = 0; i < 8; ++i) result |= byte_array[i+1] << (8ULL*i);
или
for (int i = 0; i < 8; ++i) result |= byte_array[i+1] << (8ULL*(7-i));


На худой конец, если очень узкое место, надо делать memcpy из массива в &result.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Adamos
@Adamos
Если в этих элементах биты и байты реально в том порядке, в котором нужно - банальный reinterpret_cast< ULL* >(&arr[1]);
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы