Mac环境下Zsh/Bash超长十六进制转十进制截断问题求助
解决Zsh/Bash中超长十六进制转十进制的截断问题
我懂你碰到的麻烦了——Zsh和Bash默认的整数处理是基于系统位数的(一般是64位),你要转换的这个十六进制数长度远超64位,所以用$((0x...))这种原生整数运算时就会触发截断报错,没法得到完整的超大十进制结果。
给你两个在Mac上就能直接用的解决方案,都能完美支持任意长度的大整数转换:
方法一:使用bc命令(系统自带)
bc是Unix系统默认自带的高精度计算器,支持任意精度的数值运算。你只需要指定输入进制为16,输出进制为10,把你的十六进制数传给它就行:
echo "ibase=16; 0000000000000000003218A50000000000000000000000000000000000000000" | bc
注意十六进制的字母大小写在bc里都能识别,执行这个命令后就能得到你想要的完整十进制结果。
方法二:使用Python(更简洁)
Python原生支持任意精度的大整数,处理这类转换超级方便。直接用int()函数指定进制转换,然后打印结果:
python3 -c "print(int('0000000000000000003218a50000000000000000000000000000000000000000', 16))"
这个命令执行后会直接输出你期望的4798269179035823348880781507454323228379569035237392384,完全不会有截断问题。
内容的提问来源于stack exchange,提问作者monkeyUser
相关产品推荐
相关产品推荐

