将浮点数重新映射到gdb中的ieee754表示

时间:2014-06-27 13:57:28

标签: python linux shell gdb

嗨我正在玩跟随,我想在Linux shell中转换IEEE754表示和十进制浮点数。我发现的唯一方法是:

gdb --batch -ex "print/x (float *) ( (float) 1234.567 )"

gdb --batch -ex "print/f (float *) 0x449A5225"

但它不适用于double和long double(“Invalid cast”),gdb也会截断大于32bit的值,所以double和long double。

是否有一些gdb专家可以提供帮助?

1 个答案:

答案 0 :(得分:0)

我找到了自己的解决方案,使用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