Функция 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,
которое открывает блок небезопасного кода