在UNIX shell脚本中,我可以使用什么来将十进制数转换为十六进制数?我认为od可以解决这个问题,但它没有意识到我正在为它提供数字的ASCII表示.
printf的?毛!现在使用它,但还有什么可用吗?
Kel*_*tia 176
试过printf(1)?
printf "%x\n" 34
22
Run Code Online (Sandbox Code Playgroud)
有可能在所有shell中使用内置函数来实现这一点,但它的可移植性会降低.我没有检查POSIX sh规格,看看它是否具有这样的功能.
Bil*_*win 101
echo "obase=16; 34" | bc
Run Code Online (Sandbox Code Playgroud)
如果要过滤整个整数文件,每行一个:
( echo "obase=16" ; cat file_of_integers ) | bc
Run Code Online (Sandbox Code Playgroud)
小智 65
十六进制到十进制:
$ echo $((0xfee10000))
4276158464
Run Code Online (Sandbox Code Playgroud)
十进制到十六进制:
$ printf '%x\n' 26
1a
Run Code Online (Sandbox Code Playgroud)
Orw*_*ile 15
bash-4.2$ printf '%x\n' 4294967295
ffffffff
bash-4.2$ printf -v hex '%x' 4294967295
bash-4.2$ echo $hex
ffffffff
Run Code Online (Sandbox Code Playgroud)
小智 5
对不起我的错,试试这个......
#!/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}"
Run Code Online (Sandbox Code Playgroud)
例:
$ ./dtoh 1024
400
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
178795 次 |
| 最近记录: |