有人可以解释为什么2个不同的六进制转换为相同的小数吗?
$ echo A0000044956EA2 | gawk '{print strtonum("0x" $1)}'
45035997424348832
$ echo A0000044956EA0 | gawk '{print strtonum("0x" $1)}'
45035997424348832
答案 0 :(得分:1)
从GNU awk 4.1开始,您可以使用--bignum
或-M
$ awk -M 'BEGIN {print 0xA0000044956EA2}'
45035997424348834
$ awk -M 'BEGIN {print 0xA0000044956EA0}'
45035997424348832
答案 1 :(得分:0)
不是一个答案,而是一个解决方法,至少不能完全结合strtonum函数:
这似乎确实是双打。我在这里找到了计算:strtonum。 它没有错。
但是如果你真的需要在某个awk中使用它,你应该从hexa数字中删除最后一位数字,并在strtonum对其主要部分进行计算后手动添加。
所以0xA0000044956EA1,0xA0000044956EA2和0xA0000044956EA"无论什么"应该用一个简单的正则表达式变成0xA0000044956EA0然后添加"无论"。
编辑*也许我应该将这一切全部删除,因为我甚至要进一步降级。这也不是令人满意的,只是尝试了它,我实际上无法添加一个小到一个数字这个大的数字即打印(45035997424348832 + 4)刚出来45035997424348832.所以这个解决方法将不得不继续输出如45035997424348832 + 4 for hexa 0xA0000044956EA4。