bota_header {
unsigned int magic;
unsigned int count;
};
bota_header bh{};
bh.magic = 0x13;
bh.count = 0x37;
filebuf_examle.sputn(reinterpret_cast<std::uint8_t *>(bh));
Ошибка:
Reinterpret_cast from 'bota_header' to 'std::uint8_t *' (aka 'unsigned char *') is not allowed
Тебе указатель надо преобразовывать.
Потому что Вы хотите &bh (но на самом деле не хотите).
А почему мне на самом деле не нужно хотеть сделать это, если мне нужно собрать файл со специфичной структурой?
1. Арифметика указателей работает только поверх элементов массива подходящего типа. 2. Доступ к объекту возможен только динамическим типом этого объекта, unsigned char/std::byte или signed-unsigned аналогом (где применимо).
И не должна. Нужно адрес структуры кастовать.
Надо было char* использовать, не uint8_t - это разные типы
Наверное, дело именно в том, что это разные типы данных и не важно, что они по размеру одинаковые.
Потому что это преобразование явно разрешено стандартом, как исключение, а остальные запрещены
Ты не прав. Даже если на машине байт семибитный, char там будет размером в Ровно 1 байт. Будет бать байт 16 битным- Чар будет 1 байт. Будет байт 32 битным -Чар будет 1 байт
Окей - это действительно имеет смысл
Обсуждают сегодня