引言
Bash编程中,我们一般不需要把字符串格式化为十六进制。因为,十进制是给人类看的,而16进制则用于存储到计算机。
本文通过编程实践中所遇到的困难,引出进制转换的问题。然后给出解决方案。其中,格式化字符串,所用的元字符非常有用。
问题有一个小哥在编程过程中,产生了一个疑问,他说,把十六进制的数值转换为十进制,似乎很容易。只用下面这个公式。
echo$((1631。有个事儿你得多注意,这些转换是有限制的,比如ksh88,zshandpdksh基数支持到36,ksh93支持到64。
那么对于更大的数,怎么转换呢?这就需要用到bc/dc程序。
比如一个超长的数儿,发送解析式到bc:
echo'obase=16;9999999999999999999999'|bc转换为16进制,结果为21E19E0C9BAB23FFFFF。
当然也可以使用dc程序:
echo'16o9999999999999999999999p'|dc结果是一样的,就不再贴出来了。
bc/dc程序支持的基数从2到POSIX支持的数字,至少可达到99。对于大于16的基数,大于9的数字用空格分隔,由0前导填充的数表示。
echo'obase=30;123456'|bc输出内容是这样的
04170506使用dc的结果一样,请注意中间的空格,和前导0的填充。
写在最后好吧,问1得10,夫复何求。连各种shell的差别都讲了,还有比这更用心的吗?
文章版权声明:除非注明,否则均为虚境探索者原创文章,转载或复制请以超链接形式并注明出处。