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

Функция read_unaligned

Функция read_unaligned читает значение типа T из памяти по сырому указателю *const T. В отличие от функции read, она не требует, чтобы указатель был выровнен по границе типа T. Параметром функция принимает сырой указатель, из которого нужно прочитать значение, и возвращает прочитанное значение типа T. Функция является небезопасной, так как работает с сырыми указателями и не проверяет их корректность.

Синтаксис

unsafe fn read_unaligned<T>(src: *const T) -> T

Пример

Давайте прочитаем значение типа u32 из буфера байтов, начиная с невыровненного смещения:

fn main() { let buf: [u8; 8] = [1, 2, 3, 4, 5, 6, 7, 8]; let ptr = buf.as_ptr().wrapping_add(1) as *const u32; let res = unsafe { std::ptr::read_unaligned(ptr) }; println!("{}", res); }

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

84148994

Пример

Давайте прочитаем значение типа u16 по указателю с адресом, который не выровнен по границе двух байтов:

fn main() { let buf: [u8; 4] = [10, 20, 30, 40]; let ptr = buf.as_ptr().wrapping_add(1) as *const u16; let res = unsafe { std::ptr::read_unaligned(ptr) }; println!("{}", res); }

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

7700

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

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