2

当我使用

打印f“%064X\n”$((0x1a838b13505b26867))

数字一被截断了

0000000000000000000000000000000000000000 A838B13505B26867

十六进制数/数字越大越差

打印f“%064X\n”$((0x349b84b6431a6c4ef1))00000000000000000000000000000000000000009B84B6431A6C4EF1

数字必须打印准确,因为我将求和,而不必打印可以是bc或其他东西,只要我能放入bash脚本就行

尝试

打印f“%X\n”$(0x349b84b6431a6c4ef1+1)9B84B6431A6C4EF2型

期望

打印f“%X\n”$((0x349b84b6431a6c4ef1+1))349B84B6431A6C4EF2型
1
  • 1
    该数字(示例中的数字)需要65位才能表示,但bash无法管理如此大的数字。只允许64位。 评论 6月20日14:34

3个答案

重置为默认值
2

注:我的古版本bc(2000年macos bc 1.06!)barfs为小写十六进制,因此${hexnumber^^}为大写,如果不需要,请移除。

bignum=349b84b6431a6c4ef1bc<<<“obase=16;ibase=16,${bignum^^}+1”349B84B6431A6C4EF2型
2
  • 小写字母保留用于变量和函数名,^^到处都需要。 评论 6月19日15:19
  • 我很喜欢simplicit,但我会接受awk,因为我不知道用bc加前导零
    – 萨索里
    评论 6月19日16:42
1

使用gnu awk公司您可以处理此问题:

awk-M-v n='0x349b84b6431a6c4ef1''开始{printf“%x\n”,(字符串(n)+1)}'349b84b6431a4c4 ef2
1
1

印刷这很容易&只要把它当作一根绳子。

$:打印f“%064s\n”1a838b13505b2686700000000000000000000000000000000000000001a838b13505b26867

但将前导零加到64字节字符串中与数值无关。

正在执行数学这将是一个问题。猛击不处理大于2^63-1的数字。

我的系统将处理的最大数字:

$:printf“%d\n”0x7FFFFFFFF FFFFFFF#它可以管理的9223372036854775807$:printf“%d\n”0x8000000000000#这(2^63)让它窒息bash:printf:警告:0x8000000000000000:数值结果超出范围9223372036854775807

跟随公元前蟒蛇珍珠.

您的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.