如何在 bash 中将字符串读取为十六进制数字?

如何在 bash 中将字符串读取为十六进制数字?

我有 bash 行:

expr substr $SUPERBLOCK 64 8

这是返回给我的字符串行:

00080000

我知道这实际上是小端字节序的 0x00080000。有没有办法在 bash 中以大端模式(如 0x80000)创建整数变量?

答案1

可能是更好的方法来做到这一点,但我想出了这个解决方案,它将数字转换为十进制,然后返回十六进制(并手动添加0x):

printf '0x%x\n' "$((16#00080000))"

你可以写成:

printf '0x%x\n' "$((16#$(expr substr "$SUPERBLOCK" 64 8)))"

答案2

有两个或多或少的标准(和古老的)命令行 unix 工具,它们提供了在不同基数之间转换数字的非常简单的方法:

$ { echo '16'; echo i; echo 00080000; echo p; } | dc
524288
$ { echo 'ibase=16'; echo 00080000; } | bc  
524288

对于正常人的使用,我非常喜欢bc,但是当编写生成代码的程序时,尤其是从某种解析器生成代码时,基于堆栈的工具dc可能更容易处理(实际上,原始版本bc是前端)的解析器dc)。

相关内容