分类

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 的。