我有 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
)。