Your code seems basically correct (assuming you didn't mean p.x three times). Here's a small program showing printing an RGB struct containing u32s as bytes, which I verified works as expected (prints ABC\n)
struct RGB {
x: u32,
y: u32,
z: u32
}
fn main() {
let p = RGB{ x:65, y:66, z:67};
let mut out = std::io::stdout();
out.write([p.x as u8, p.y as u8, p.z as u8, 10]);
}