Wal*_*Air 2 numbers type-conversion rust
并将数字转换为字节数组?
我想避免使用transmute,但是最重要的是要达到最佳性能。
有T::from_str_radix从字符串转换(你可以选择的基础,T可以是任意整数型)。
要将整数转换为a String,可以使用format!:
format!("{:x}", 42) == "2a"
format!("{:X}", 42) == "2A"
Run Code Online (Sandbox Code Playgroud)
编辑:
如果要在u32和之间进行转换[u8; 4](例如),可以使用transmute,这就是它的用途。
还要注意,Rust具有to_be和to_le处理持久性的功能:
unsafe { std::mem::transmute::<u32, [u8; 4]>(42u32.to_le()) } == [42, 0, 0, 0]
unsafe { std::mem::transmute::<u32, [u8; 4]>(42u32.to_be()) } == [0, 0, 0, 42]
unsafe { std::mem::transmute::<[u8; 4], u32>([0, 0, 0, 42]) }.to_le() == 0x2a000000
unsafe { std::mem::transmute::<[u8; 4], u32>([0, 0, 0, 42]) }.to_be() == 0x0000002a
Run Code Online (Sandbox Code Playgroud)
一个u324字节的字节,您也许可以std::mem::transmute将a解释[u8; 4]为u32:
不依赖解决方案只是执行数学,遵循Rob Pike的步骤:
fn as_u32_be(array: &[u8; 4]) -> u32 {
((array[0] as u32) << 24) +
((array[1] as u32) << 16) +
((array[2] as u32) << 8) +
((array[3] as u32) << 0)
}
fn as_u32_le(array: &[u8; 4]) -> u32 {
((array[0] as u32) << 0) +
((array[1] as u32) << 8) +
((array[2] as u32) << 16) +
((array[3] as u32) << 24)
}
Run Code Online (Sandbox Code Playgroud)
它可以编译为合理有效的代码。
但是,如果依赖项是一个选项,则使用字节顺序板条箱更简单。
| 归档时间: |
|
| 查看次数: |
6874 次 |
| 最近记录: |