嗨,我正在玩以下内容,我想在 Linux shell 中在 IEEE754 表示形式和十进制 float 之间进行转换。我发现的唯一方法是:
gdb --batch -ex "print/x (float *) ( (float) 1234.567 )"
gdb --batch -ex "print/f (float *) 0x449A5225"
但它不适用于 double 和 long double(“无效转换”),而且 gdb 也会截断大于 32 位的值,因此 double 和 long double 。
有gdb专家帮忙吗?
最佳答案
我用 Python 找到了自己的解决方案:
# python -c 'import struct; print "%#x" % struct.unpack("I", struct.pack("f", 1234.567))'
0x449a5225
# python -c 'import struct; print "%#x" % struct.unpack("Q", struct.pack("d", 1234.567))'
0x40934a449ba5e354
# python -c 'import struct; print "%f" % struct.unpack("d", struct.pack("Q", 0x4094b2449ba5e354))'
1324.567000
# python -c 'import struct; print "%f" % struct.unpack("f", struct.pack("I", 0x449a5225 ))'
1234.566895
关于python - 将 float 重铸为 gdb 中的 ieee754 表示形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24453649/