[0x12, 0x34, 0x56, 0x78]
みたいなバイト配列から数値へ変換したいケースがある。
その時、読み取り対象によってはビッグエンディアンだったりリトルエンディアンだったりするけど、自分で考えると面倒なので、それを良い感じにする方法。
といっても Rust 1.32 くらいから標準ライブラリとして搭載されていて、下記のようにすれば変換してくれる:
let value = u32::from_be_bytes([0x12, 0x34, 0x56, 0x78]); assert_eq!(value, 0x12345678);
固定長配列じゃ無くて Vec
から直接変換して欲しいよ~って言う場合は、 try_into()
を通せばできる。
let vec: Vec<u8> = ...; // 4 bytes let bytes: [u8; 4] = vec.try_into().unwrap(); let value = u32::from_be_bytes(bytes); // リトルエンディアンだと from_le_bytes assert_eq!(value, wanted_u32_value);
というメモでした。