Soul Guardian
Soul Guardian

Reputation: 5

u32 to ASCII Bytes without String Rust

i want to convert u32 into ASCII bytes.

input: 1u32
output [49]

This was my try, but its empty with 0u32 and also using Vec, i would prefer ArrayVec but how do i know the size of the number. Is there any simple way to do this , without using any dynamic allocations?

let mut num = 1u32;
let base = 10u32;
let mut a: Vec<char> = Vec::new();
while num != 0 {
    let chars = char::from_digit(num % base,10u32).unwrap();
     a.push(chars);
    num /= base;
}
 let mut vec_of_u8s: Vec<u8> = a.iter().map(|c| *c as u8).collect();
 vec_of_u8s.reverse();
 println!("{:?}",vec_of_u8s)

Upvotes: 0

Views: 359

Answers (1)

kmdreko
kmdreko

Reputation: 60051

Use the write! macro and ArrayVec with the capacity set to 10 (the maximum digits of a u32):

use std::io::Write;
use arrayvec::ArrayVec; // 0.7.2

fn main() {
    let input = 1u32;
    let mut buffer = ArrayVec::<u8, 10>::new();
    write!(buffer, "{}", input).unwrap();
    dbg!(buffer);
}
[src/main.rs:10] buffer = [
    49,
]

Upvotes: 1

Related Questions