我有这个代码:
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)
游乐场