BASH基本转换从十进制到十六进制

Bash中,如何进行从十进制到另一个基数的转换,尤其是十六进制.从另一个方面来看似乎很容易:

$echo $((16#55))
85

通过网络搜索,我找到了一个执行数学和字符操作的脚本来进行转换,我可以将其用作函数,但我认为bash已经有了内置的基本转换 – 可以?

最佳答案
使用bash(或任何shell,只要printf命令可用(通常在shell中构建的标准POSIX命令)):

printf '%x\n' 85

使用zsh,您还可以:

dec=85
hex=$(([##16]dec))

这适用于从2到36的基数(0-9a-z不区分大小写的数字).

使用ksh93,您可以使用:

dec=85
base54=$(printf %..54 "$dec")

适用于从2到64的基数(0-9a-zA-Z @ _作为数字).

使用ksh和zsh,还有:

$typeset -i34 x=123; echo "$x"
34#3l

虽然这仅限于ksh88,zsh和pdksh中的36以及ksh93中的64.

请注意,所有这些都限制在系统上的长整数的大小(带有一些shell的int).对于任何更大的东西,你可以使用bc或dc.

$echo 'obase=16; 9999999999999999999999' | bc
21E19E0C9BAB23FFFFF
$echo '16o 9999999999999999999999 p' | dc
21E19E0C9BAB23FFFFF

支持的基数范围从2到POSIX所需的某个数量至少高达99.对于大于16的基数,大于9的数字表示为以空格分隔的0填充十进制数.

$echo 'obase=30; 123456' | bc
 04 17 05 06

转载注明原文:BASH基本转换从十进制到十六进制 - 代码日志