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

Функция transmute

Функция transmute выполняет небезопасное преобразование значения из одного типа в другой, интерпретируя его битовое представление в новом типе. Она объявлена как unsafe, потому что компилятор не может проверить корректность такого преобразования. Параметром функция принимает значение исходного типа, а тип результата указывается явно через аннотацию или турборыбку.

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

Синтаксис

unsafe { std::mem::transmute::<From, To>(value) }

Пример

Давайте преобразуем число типа u32 в массив из четырёх байтов [u8; 4]:

fn main() { let num: u32 = 0x12345678; let bytes: [u8; 4] = unsafe { std::mem::transmute(num) }; println!("{:?}", bytes); }

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

[120, 86, 52, 18]

Пример

Давайте преобразуем массив из четырёх байтов [u8; 4] обратно в число типа u32:

fn main() { let bytes: [u8; 4] = [120, 86, 52, 18]; let num: u32 = unsafe { std::mem::transmute(bytes) }; println!("{:#X}", num); }

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

0x12345678

Пример

Давайте преобразуем число типа f32 в его битовое представление типа u32:

fn main() { let float: f32 = 1.0; let bits: u32 = unsafe { std::mem::transmute(float) }; println!("{:#X}", bits); }

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

0x3F800000

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

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