在Bash脚本中将十进制转换为十六进制

6

我希望将bash脚本中的十进制数(循环索引数)转换为十六进制,以便由另一个命令使用。类似于:

for ((i=1; i<=100; i++))
do

     a=convert-to-decimal($i)
     echo "$a"

done

如何实现将变量 i 的值转换为一个带有四位十六进制标识符的十六进制数,存储在变量 a 中。例如,如果变量 i 的值为 100,那么变量 a 的值应该是 0x0064


2
可能是在UNIX shell脚本中将十进制转换为十六进制的重复问题。 - TayTay
1
printf "%#06x" 100 → 0x0064 - Biffen
2个回答

4

你可以使用printf

$ printf "0x%04x" 100
0x0064

在您的例子中,您可能会使用a="$(printf '0x%04x' $i)"

2
或者使用 printf -v a '0x%04x' $i 代替进程替换。 - Benjamin W.
@BenjaminW。你肯定是指“命令替换”。但你的观点是正确的。 - gniourf_gniourf
@gniourf_gniourf 我绝对会! - Benjamin W.
1
实际上,0x可以省略。#标志会自动添加它。因此,printf“%#06x”100会给出0x0064。唯一的问题是OP是否需要小写或大写十六进制数字。在后一种情况下,应使用X说明符。 - TrueY
@TrueY:随意编辑答案以改进它!(或者写下你自己的答案)。 - gniourf_gniourf

1

这就是你要找的东西

对于 i 在 seq 1 100 中; 执行 printf '%x\n' $i 完成


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接