在Rust中循环遍历整数的字节的惯用方法是什么?

hed*_*017 2 arrays iteration byte unsafe rust

我尝试了这样一段代码来遍历一个字节u64:

let mut message: u64 = 0x1234123412341234;
let msg = &message as *mut u8;

for b in 0..8 {
    // ...some work...
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,Rust不允许这种类似C的索引.

mca*_*ton 5

虽然transmute-ing是可能的(参见@Tim 的答案),但最好使用byteorder crate来保证字节顺序:

extern crate byteorder;

use byteorder::ByteOrder;

fn main() {
    let message = 0x1234123412341234u64;
    let mut buf = [0; 8];
    byteorder::LittleEndian::write_u64(&mut buf, message);

    for b in &buf {
         // 34, 12, 34, 12, 34, 12, 34, 12, 
         print!("{:X}, ", b);
    }

    println!("");

    byteorder::BigEndian::write_u64(&mut buf, message);

    for b in &buf {
         // 12, 34, 12, 34, 12, 34, 12, 34, 
         print!("{:X}, ", b);
    }
}
Run Code Online (Sandbox Code Playgroud)

(游乐场的固定链接)