gpt4 book ai didi

bash - 在shell脚本中将十进制数转换为十六进制和二进制

转载 作者:行者123 更新时间:2023-11-29 09:06:52 31 4
gpt4 key购买 nike

我在 file.txt 的每一行中都有一个十进制数:

    1
2
3

我正在尝试(现在太久了)编写一个单行脚本来获得一个输出,其中每一行都有一个包含十进制、十六进制和二进制的列。为了简化任务,我们可以说原始数字以字节表示。所以最大值为 255。

  1. 我首先尝试将每个数字解码为带有前缀 0 的二进制,以便获得 8 位模式:

    awk '{print "ibase=10;obase=2;"$1}' $1 |公元前 | xargs printf "%08d\n"

    其中 awk 语句中的外部 $1 是 file.txt。输出是:

    00000001
    00000010
    00000011
  2. 16 进制也一样,前面加一个 0

    awk '{printf("0x%02x\n", $1)}' $1

    和以前一样。输出是:

    0x01
    0x02
    0x03
  3. 好吧,小数点应该只是一个打印:

    1
    2
    3

我想要的是我拥有的一个类轮:

    1 00000001 0x01
2 00000001 0x02

所以基本上是将 1. 2. 和 3. 放在输出的每一行中。

我尝试使用 system() 在 awk 中执行 bc(和其他命令)但没有成功。还有无数其他方式。你会怎么做?

最佳答案

下面的一行代码应该可以工作:

printf "%s %08d 0x%02x\n" "$1" $(bc <<< "ibase=10;obase=2;$1") "$1"

示例输出:

$ for i in {1..10}; do printf "%s %08d 0x%02x\n" "$i" $(bc <<< "ibase=10;obase=2;$i") "$i"; done
1 00000001 0x01
2 00000010 0x02
3 00000011 0x03
4 00000100 0x04
5 00000101 0x05
6 00000110 0x06
7 00000111 0x07
8 00001000 0x08
9 00001001 0x09
10 00001010 0x0a

关于bash - 在shell脚本中将十进制数转换为十六进制和二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18870209/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com