在UNIX shell脚本中,我可以使用什么来将十进制数转换为十六进制数?我认为od可以解决这个问题,但它没有意识到我正在为它提供数字的ASCII表示.
printf的?毛!现在使用它,但还有什么可用吗?
试过printf(1)
?
printf "%x\n" 34 22
有可能在所有shell中使用内置函数来实现这一点,但它的可移植性会降低.我没有检查POSIX sh规格,看看它是否具有这样的功能.
echo "obase=16; 34" | bc
如果要过滤整个整数文件,每行一个:
( echo "obase=16" ; cat file_of_integers ) | bc
十六进制到十进制:
$ echo $((0xfee10000)) 4276158464
十进制到十六进制:
$ printf '%x\n' 26 1a
bash-4.2$ printf '%x\n' 4294967295 ffffffff bash-4.2$ printf -v hex '%x' 4294967295 bash-4.2$ echo $hex ffffffff
对不起我的错,试试这个......
#!/bin/bash : declare -r HEX_DIGITS="0123456789ABCDEF" dec_value=$1 hex_value="" until [ $dec_value == 0 ]; do rem_value=$((dec_value % 16)) dec_value=$((dec_value / 16)) hex_digit=${HEX_DIGITS:$rem_value:1} hex_value="${hex_digit}${hex_value}" done echo -e "${hex_value}"
例:
$ ./dtoh 1024 400