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