当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在UNIXshell脚本中将十进制转换为十六进制》经验,为你挑选了5个好方法。

在UNIX shell脚本中,我可以使用什么来将十进制数转换为十六进制数?我认为od可以解决这个问题,但它没有意识到我正在为它提供数字的ASCII表示.

printf的?毛!现在使用它,但还有什么可用吗?



1> Keltia..:

试过printf(1)

printf "%x\n" 34
22

有可能在所有shell中使用内置函数来实现这一点,但它的可移植性会降低.我没有检查POSIX sh规格,看看它是否具有这样的功能.


它没有比printf更多的POSIX.这甚至在"sh"中起作用.
printf不是aribtrary精度.`bc`是.例如,以"238862874857408875879219909679752457540"作为输入,printf给出"结果太大".BC方法适用于大于标准int/long/bigint的东西
并且,如果您想要十六进制的大写字母,请使用带有大写X的`printf"%X"`.
并强制输出像"0x00",你可以使用printf"0x%02X"

2> Bill Karwin..:
echo "obase=16; 34" | bc

如果要过滤整个整数文件,每行一个:

( echo "obase=16" ; cat file_of_integers ) | bc


@skiphoppy:如果你写:echo"obase = 16; 12 34 56"| 你得到1E240,就像你写的那样:echo"obase = 16; 123456"| 公元前.因此,在一行中处理任意数量的整数的方法是将每个数字放在它自己的行上:tr'''\ 015'@Sridhar-Sarnobat,这*是*十进制到十六进制.我假设你的意思是将hex转换为dec.为此,请设置`ibase = 16`.您可以阅读[bc手册](http://www.gnu.org/software/bc/manual/html_mono/bc.html)了解更多详情.

3> 小智..:

十六进制到十进制:

$ echo $((0xfee10000))
4276158464

十进制到十六进制:

$ printf '%x\n' 26
1a



4> Orwellophile..:
bash-4.2$ printf '%x\n' 4294967295
ffffffff

bash-4.2$ printf -v hex '%x' 4294967295
bash-4.2$ echo $hex
ffffffff



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}"

例:

$ ./dtoh 1024
400


@benchuk`printf`在哪里不可用?
推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有