打印字节的正确类型转换

时间:2014-04-16 22:25:11

标签: c++ rust

我试图重新实施business card ray tracer生锈,以获得乐趣和利润。据我所知,所有的逻辑都已到位,但对于我的生活,我无法弄清楚如何正确地将我的浮点值转换为ppm文件格式所期望的RGB字节。在原始代码(C ++)中,它看起来像这样:

printf("%c%c%c",(int)p.x,(int)p.y,(int)p.z);

其中p是浮点数的三维向量,表示RGB值。我对print!没有太多运气,所以在经过多次调整之后我写了等价表达式:

let mut out = io::stdout();
out.write(&[(p.x as u8),(p.x as u8),(p.x as u8)]);

然而,输出是关闭的(我可以发布它,如果你真的想要,但足以说明正确的输出有很多不可打印的字符,而我的版本是相当可打印的)。老实说,我不理解任何一种语言的类型转换的细微差别。有人想帮忙吗?

修改: full source(请注意我使用浮点数作为矢量属性)

1 个答案:

答案 0 :(得分:2)

你的代码看起来基本上是正确的(假设你没有表示p.x三次)。 这是一个小程序,显示打印包含u32s作为字节的RGB结构,我验证了它按预期工作(打印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]);
}