Rust中如何将二进制整数转换为二进制字符串或数字数组?
二进制整数转二进制字符串/数组的Rust实现
转二进制字符串
Rust的格式化语法支持直接将整数转为二进制字符串,使用{:b}格式符即可,无需先转十进制:
let x: u8 = 0b101; let s = format!("{:b}", x); println!("{:?}", s); // 输出 "101"
如果需要补前导零到固定长度(比如u8对应的8位),可以用{:08b},输出结果为00000101。
转二进制数组
要得到[1,0,1]这类数组,需要通过位运算逐位提取每一位的数值:
let x: u8 = 0b101; // 提取有效二进制位(不含前导零) let leading_zeros = x.leading_zeros() as usize; let mut a = Vec::new(); // 从最高有效位到最低位遍历 for i in (0..(8 - leading_zeros)).rev() { let bit = ((x >> i) & 1) as u8; a.push(bit); } // 如果需要固定长度的完整位数数组(比如u8的8位) let mut fixed_a = [0u8; 8]; for i in 0..8 { fixed_a[7 - i] = ((x >> i) & 1) as u8; } println!("{:?}", a); // 输出 [1, 0, 1] println!("{:?}", fixed_a); // 输出 [0, 0, 0, 0, 0, 1, 0, 1]
你之前尝试的to_ne_bytes()和to_be_bytes()是将整数转换为字节数组(比如u8类型会得到长度为1、值为5的数组),和提取二进制位的需求不匹配,所以无法得到目标结果。
内容的提问来源于stack exchange,提问作者sdaadsa dasdsasad
相关产品推荐
相关产品推荐

