【发布时间】:2014-01-06 21:49:49
【问题描述】:
我尝试了以下操作:
std::cout << std::hex << 17.0625;
但它以十进制转储它。我想看看 11.01(十六进制的 17.0625)。如何以十六进制打印一些浮点值?
请不要提供以下解决方案:
void outhexdigits(std::ostream& out, fp_t d, int max_chars=160)
{
while(d > 0. && max_chars)
{
while(d < 1. && max_chars){
out << '0';
--max_chars;
d*=16;
}
if (d>=1. && max_chars) {
int i = 0;
while (d>=1.)
++i, --d;
out << std::hex << i;
--max_chars;
}
}
}
有没有办法在 STL/boost 中以十六进制转储浮点数?
【问题讨论】:
-
老实说,我发现 C++ 在输出这种格式的表单时非常烦人。在这些情况下,我使用 C 风格的格式化打印。
-
您需要将
memcpy转换为int,并打印其十六进制表示。memcpy是将构成一种类型对象的位视为另一种类型而不遇到未定义行为的唯一安全方法(您会遇到未指定的行为,并且由您决定是否知道这些位构成有效的@987654327 @ 表示)。 -
你想要
double的内存布局的十六进制表示还是以16为基数打印人类可读的FP值? -
另外,
std::hexfloat。 -
@JBL 也许你看到了通过指针的类型双关语?
reinterpret_cast<int*>(&f);但是,由于别名规则,这只是未定义的行为。