如何在Bash中操作十六进制值?

问题描述 投票:1回答:1

我有一个十六进制值的变量:在这个例子中,一个值为0xfe的字节:

echo $MYVAR | hexdump

0000000 0afe
0000002

我想在我的bash脚本上使用这个值,特别是我需要:

  1. 用作字符串(echo X $ MYVAR应该给我Xfe)
  2. 增加它,(0xff)
  3. 转换回原始格式(我需要保存递增的值以备将来使用)

也许如果我将其转换为整数格式会更容易?

编辑:这是我如何初始化var:

printf "\xfe" | dd bs=1 of=tempfile seek=8001
MYVAR=`dd if=tempfile skip=8001 count=1 bs=1`
bash shell hex
1个回答
2
投票

要将十六进制数打印为字符串,您可以

printf 0x%X $MYVAR

例如,可以增加它并以十六进制打印

printf 0x%X `echo $(( 0xfe + 1 ))`

对于“转换回”原始格式,我认为你的意思是保持整数值,在这种情况下,您可以简单地使用$MYVAR而不进行格式转换。

希望这可以帮助, 问候。

编辑: 要关注您的问题编辑,我将在下面添加我的答案。

你可以用这种方式设置MYVAR:

read dummy MYVAR <<EOF
`dd if=tempfile skip=8001 count=1 bs=1|od -x`
EOF

现在您有从MYVALUE中存储的文件读取的字节的十六进制值。 您现在可以使用echoprintf或其他任何东西直接打印它。

$ echo $MYVAR
00fe

如前所述,你可以对它进行数学运算:

$ printf %X $((0x$MYVAR + 1))
FF

(感谢fedorqui最短的版本)

问候。

© www.soinside.com 2019 - 2024. All rights reserved.