РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1244 of 1245 menu

Функция transmute_copy

Функция transmute_copy из модуля std::mem выполняет преобразование типа путём побайтового копирования значения из переданной ссылки в новый тип. Первым параметром функция принимает ссылку на исходное значение, тип которого нужно переинтерпретировать, а вторым - целевой тип, в который выполняется преобразование. В отличие от transmute, эта функция не требует, чтобы размеры исходного и целевого типов совпадали во время компиляции, однако она копирует только столько байт, сколько занимает целевой тип.

Функция является небезопасной, так как позволяет обойти проверки типов. Если целевой тип больше исходного, чтение выйдет за пределы исходного значения, что приводит к неопределённому поведению. Если полученное значение содержит недопустимые битовые комбинации для целевого типа, поведение также будет неопределённым.

Синтаксис

unsafe { std::mem::transmute_copy::<Src, Dst>(&src) }

Пример

Давайте преобразуем массив байтов в 32-битное целое число:

fn main() { let bytes: [u8; 4] = [0x01, 0x00, 0x00, 0x00]; let res: u32 = unsafe { std::mem::transmute_copy(&bytes) }; println!("{}", res); }

Результат выполнения кода:

1

Пример

Давайте преобразуем целое число в массив байтов:

fn main() { let value: u32 = 12345; let res: [u8; 4] = unsafe { std::mem::transmute_copy(&value) }; println!("{:?}", res); }

Результат выполнения кода:

[57, 48, 0, 0]

Пример

Давайте преобразуем ссылку в указатель и обратно:

fn main() { let value: i32 = 42; let ptr: *const i32 = unsafe { std::mem::transmute_copy(&value) }; let res: i32 = unsafe { std::mem::transmute_copy(&ptr) }; println!("{}", res); }

Результат выполнения кода:

42

Смотрите также

  • функция transmute,
    которая преобразует тип с проверкой совпадения размеров во время компиляции
  • функция read,
    которая читает значение из указателя без его перемещения
  • функция MaybeUninit,
    которая позволяет работать с неинициализированной памятью безопаснее
  • ключевое слово unsafe,
    которое открывает доступ к небезопасным операциям
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить