首页 > 解决方案 > 在 Visual Studio C++ 调试器中查看双位模式

问题描述

我正在使用 IEEE-754 双打,我想验证不同平台之间的位模式是否匹配。出于这个原因,我想在 Visual Studio C++ 调试器中查看 double 的位模式。

我已经尝试过format specifiers,但它们似乎不允许我将 double 格式化为任何可以让我看到位模式的东西。

我最终找到的一种方法是使用 Memory View 并&x在地址字段中输入变量 ( ) 的地址。这允许我设置例如 8 位整数十六进制显示,这给了我我需要的东西。但是有没有其他更方便的方式在调试器中以这种方式格式化双精度?

标签: c++visual-studiovisual-studio-debugging

解决方案


要查看确切的二进制浮点值,您应该使用%a/%A将其打印为十六进制,而std::hexfloat不是检查其位模式

printf("Hexadecimal: %a %A\n", 1.5, 1.5);
std::out << std::hexfloat << 1.5 << '\n';

但是,如果您真的需要查看实际的位模式,那么您只需要重新解释底层内存区域的类型,例如auto bits = reinterpret_cast<uint64_t*>(doubleValue). 您无需打开 Memory View 即可实现此目的,只需在 Watch 窗口中进行简单的转换即可。所以要分别得到doublefloat使用*(__int64*)&doubleValue,x和的位模式*(int*)&floatValue,x。确实会发生严格的别名,但您实际上不需要在 MSVC 调试器中关心它
注意它__int64是 MSVC 的内置类型,因此您可能希望使用它long long。Typedef 和宏之类uint64_t的在观看时不起作用

或者,您可以通过使用,或转换char*为数组并打印为数组来单独访问字节。这次不会发生严格的别名,但输出的可读性可能会降低(char*)&doubleValue, 8(char*)&floatValue, 4(char*)&floatingPoint, [sizeof floatingPoint]

演示


推荐阅读