【问题标题】:Proper type conversion for printing bytes打印字节的正确类型转换
【发布时间】:2014-04-16 22:25:11
【问题描述】:

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

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

其中p 是一个 3-d 浮点向量,表示 RGB 值。我对print! 的运气不太好,所以经过多次调整后,我将等效表达式写为:

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

但是,输出很差(如果你真的想要,我可以发布它,但只要说正确的输出有很多不可打印的字符就足够了,而我的版本是完全可打印的)。老实说,我不理解这两种语言的类型转换的细微差别。有人愿意帮忙吗?

编辑: full source(注意我使用浮点数作为矢量属性)

【问题讨论】:

标签: c++ rust


【解决方案1】:

您的代码似乎基本正确(假设您的意思不是 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]);
}

【讨论】:

  • 我已在链接中添加了我的完整来源。会不会是我的结构使用 f64 作为其 xyz 属性?
猜你喜欢
  • 2017-06-27
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
相关资源
最近更新 更多