按相反顺序复制/读取字节



我有这个代码:

let x:     [u8; 4]  = [0b10111011, 0b00110110, 0b11100010, 0b00010001];
let mut y: [u32; 1] = [0];

unsafe {
std::ptr::copy(x.as_ptr() as *const u32, y.as_mut_ptr(), 1);
}

println!("{:b}", y[0]);

print语句输出10001111000100011011010111011,这意味着y[0]的读取顺序与我需要的相反

我希望y基本上就是[0b10111011_00110110_11100010_00010001]

我知道这与endianness有关,但我不知道如何实现这一点。非常感谢您的帮助。

这确实是因为您的计算机以小端字节顺序存储和读取整数,但您以大端字节顺序指定了x

尝试使用u32::from_be_bytes((,它可以避免unsafe块,并始终将x转换为正确的u32表示形式,无论是在小端还是大端机器上。

let y = u32::from_be_bytes(x)

游乐场

最新更新