なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

Rust でバイト配列から数値に変換したい

[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);

というメモでした。