Bash shell十进制到二进制base 2转换

Dan*_*ore 29 binary bash shell decimal

我正在寻找一种简单的方法在Bash中将十进制数转换为二进制数.我有需要转换的变量:

$ip1 $ip2 $ip3 $ip4
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法可以在不查看每个数字的情况下执行此操作?

我宁愿不要写很多代码.

cod*_*ict 57

您可以使用bc:

echo "obase=2;$ip1" | bc
Run Code Online (Sandbox Code Playgroud)

看见

  • 好的解决方案 一个稍微紧凑(并且性能稍好)的版本是:`bc <<<"obase = 2; $ ip1"`. (6认同)
  • @DanielDC:你可以这样做: `echo "obase=2;10;20;30" | 公元前 | tr -d '\n'` (2认同)
  • 如果您正在寻找反转过程,即二进制到十进制,您可以使用 `echo $((2#$@))`,其中 $@ 是您的二进制数。 (2认同)

Cyr*_*rus 33

使用bash builtin命令将十进制转换为二进制(范围0到255):

D2B=({0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1})

echo ${D2B[7]}
Run Code Online (Sandbox Code Playgroud)

00000111

echo ${D2B[85]}
Run Code Online (Sandbox Code Playgroud)

01010101

echo ${D2B[127]}
Run Code Online (Sandbox Code Playgroud)

01111111


要删除前导零,例如${D2B[7]}:

echo $((10#${D2B[7]}))
Run Code Online (Sandbox Code Playgroud)

111


这将创建一个00000000 00000001 00000010 ... 11111101 11111110 11111111带有bash 大括号扩展的数组.数组D2B中的位置表示其十进制值.

另请参阅:了解代码({0..1} {0..1} {0..1} {0..1} {0..1} {0..1} {0..1} {0 ..1})

  • 非常好的纯粹bash解决方案!要对范围0到2 ^ n-1进行概括,请使用`eval D2B ='('$(for((i = 0; i <$ n; i ++)); do printf'%s'"{0 .. 1}";完成)')'`(在设置'n`之后).唯一的缺点是这个方法需要O(2 ^ n)空间(超多项式!).这很快就会变得笨拙. (2认同)
  • @domih:我已经更新了我的答案. (2认同)
  • @domih:这里的`D2B` 是一个数组。我不推荐使用`$D2B`,因为它是用来显示字符串的。要访问数组的第一个元素,请使用 `${D2B[0]}`。 (2认同)

Eri*_*ski 5

Bash中十进制到二进制的转换:

我正在使用 Ubuntu 14.04 来做到这一点。

将十进制 1 到 5 转换为二进制。

el@apollo:~$ bc <<< "obase=2;1"
1
el@apollo:~$ bc <<< "obase=2;2"
10
el@apollo:~$ bc <<< "obase=2;3"
11
el@apollo:~$ bc <<< "obase=2;4"
100
el@apollo:~$ bc <<< "obase=2;5"
101
Run Code Online (Sandbox Code Playgroud)

奖金示例:

el@apollo:~$ bc <<< "obase=2;1024"
10000000000

el@apollo:~$ bc <<< "obase=2;2^128"
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)