I am trying to serialize a u32 number into byte array, but I was not able until now, can someone help me with that?
Thanks
I am trying to serialize a u32 number into byte array, but I was not able until now, can someone help me with that?
Thanks
If you don't want to depend on external libraries:
use std::mem::transmute;
let bytes: [u8; 4] = unsafe { transmute(123u32.to_be()) }; // or .to_le()
Thank you guys, both solutions worked for me.
If don't mind using operators and prefer not to use unsafe
, you can do this
fn transform_u32_to_array_of_u8(x:u32) -> [u8;4] {
let b1 : u8 = ((x >> 24) & 0xff) as u8;
let b2 : u8 = ((x >> 16) & 0xff) as u8;
let b3 : u8 = ((x >> 8) & 0xff) as u8;
let b4 : u8 = (x & 0xff) as u8;
return [b1, b2, b3, b4]
}
This thread pops in search engines as one of the first hits, so the following might be useful to someone landing here.
From Rust 1.32.0 onward, the integer primitives have a builtin method for converting to a byte array:
fn main() {
let value: u32 = 0x1FFFF;
let bytes = value.to_be_bytes();
println!("{:?}" , bytes);
}
Use to_le_bytes
for Little Endian byte order.
No unsafe
code and no external libraries needed.
They also have from_{be,le}_bytes()
as well-- nice!