такое:
struct A(i32, u8, &[B]), struct B(i32),
transmute(&[u8]) -> &[A]
Что-то типа каста различных типов под указателями в Си
А и В - repr(c)
А такое вроде и нельзя трансмьютить, выравнивание ж как минимум:/
Ну, как бы сказать, там либо repr(c), либо packed. В общем, нет выравнивания, структура уже подразумевает что выравнена по 32 битам
Структура да, а вот слайс не факт И как ты это будешь сейфово проверять?:/
Ну мне не надо проверять. Структура packed. Мне бы просто не хотелось номом парсить и копировать что-то, хочу просто по ссылкам/указателям обращаться
Мне кажется ровно такого нет, но можешь посмотреть в сторону — ref_cast — bytemuck — slice-dst
> ref_cast Автора крейта легко угадать
да тут авторов всех крейтов легко угадать
А кто? На ум только dtolnay приходит
Ну, в общем, из трёх только bytemuck подходит. Надеюсь, я не отстрелю себе ноги, используя его
Там есть очень хорошая документация про то, что делать, чтобы было безопасно. Вообще, если на твоей структуре работает derive(Pod), то все хорошо.
Обсуждают сегодня