Rust 实现二进制转换

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}");
}
Tags :

Related Posts

Rust:智能指针Box<T>

Rust:智能指针Box<T>

BOX<T> 是一个用于在堆上分配内存的智能指针,提供对堆内存的所有权管理。 核心概念 堆分配 Box<T> 将数据存储在堆 Heap 而非栈 Stack 上,栈上仅存储指向堆数据的指针

Read More
使用 axum 构建微服务(-)

使用 axum 构建微服务(-)

一直想使用 axum 完成工作中的一些服务功能,发现版本已经更新到了 0.8.x 重新梳理并学习一步一实现一个小的功能 开始 axum is a web application framework that focuses on ergonomics and modularity

Read More
rust 实现线性数据结构

rust 实现线性数据结构

线性数据结构 数组、栈、队列、双端队列数据项的顺序由添加或者删除的顺序决定 栈 - LIFO 先进后出原则 根据栈的特性可以抽象以下数据操作: new() push(item) pop() peek() is_empty() size() RUST 实现栈 // stack.rs #[derive(Debug)] struct Stack<T> { top: usize, data: Vec<T> } impl <T> Stack <T> { fn new() -> Self { Stack { top: 0, data: Vec::new() } } fn push(&mut self, val: T) { self.data.push(val); self.top += 1; } fn pop(&mut self) -> Option<T> { if self.top == 0 {return None;} self.top -= 1; // 使用Vec数据结构的pop() self.data.pop(); } fn peek(&self) -> Option<T> { if self.top == 0 { return None; } self.data.get(self.top - 1); } fn is_empty(&self) -> usize { 0 == self.top } fn size(&self) -> usize { self.top } }

Read More