
Rust 实现二进制转换
Table of Contents

fn divide_by_two(mut dec_num: u32) -> String {
// save rem with Stack
let mut rem_stack = Stack::new();
while dec_num > 0 {
let rem = dec_num % 2;
rem_stack.push(rem);
dec_num /=2;
}
// connect stack items to String
let mut bin_str = "".to_string();
while !rem_stack.is_empty() {
let rem = rem_stack.pop().unwrap().to_string();
bin_str += &rem;
}
bin_str
}
那么二进制实现了,八进制,16进制也容易实现
fn base_converter(mut dec_num: u32, base: u32) -> String {
// digits 对应各种余数的字符, 10-15 是A-F
let digits = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','F'];
let mut rem_stack = Stack::new();
while dec_num > 0 {
let rem = dec_num % base;
rem_stack.push(rem);
doc_num /= base;
}
let mut base_str = "".to_string();
while !rem_stack.is_empty() {
let rem = rem_stack.pop().unwrap() as usize;
base_str += &digits[rem].to_string;
}
base_str
}
#[test]
fn test_base_converter() {
let bin_str = base_converter(10,2);
let hex_str = base_converter(43,16);
println!("10 is b{bin_str}, 43 is x{hex_str}");
}