Rust 中检查是大端还是小端
2020-01-01 16:29 rust
在网络编程时,需要将 host byte order
转为 network byte order
。
rust 本身支持在编译期检查当前的编译工具链是大端还是小端,如下所示:
pub fn is_little_endian() -> bool {
cfg!(target_endian = "little")
}
当然,也有方法可以在运行期进行检查,这里我们使用 union
类型,为了方便。
pub fn is_little_endian() -> bool {
union Check {
l: u16,
s: [u8; 2],
}
unsafe {
let c = Check { l: 0x0102 };
return c.s[0] == 2;
}
}
但要注意的是直接访问 union
中的内部元素是 unsafe
的。