Den*_*vac 7 bash numeric-data hex expr
我有 bash 线:
expr substr $SUPERBLOCK 64 8
Run Code Online (Sandbox Code Playgroud)
这是返回给我的字符串行:
00080000
Run Code Online (Sandbox Code Playgroud)
我知道这实际上是小端的 0x00080000。有没有办法在像 0x80000 这样的 big-endian 中的 bash 中从它创建整数变量?
可能是一个更好的方法来做到这一点,但我想出了这个解决方案,将数字转换为十进制,然后再转换回十六进制(并手动添加0x
):
printf '0x%x\n' "$((16#00080000))"
Run Code Online (Sandbox Code Playgroud)
你可以写成:
printf '0x%x\n' "$((16#$(expr substr "$SUPERBLOCK" 64 8)))"
Run Code Online (Sandbox Code Playgroud)
有两种或多或少的标准(和古老)命令行 unix 工具提供了在不同基数之间转换数字的非常简单的方法:
$ { echo '16'; echo i; echo 00080000; echo p; } | dc
524288
$ { echo 'ibase=16'; echo 00080000; } | bc
524288
Run Code Online (Sandbox Code Playgroud)
对于正常的人类使用,我非常喜欢bc
,但是在编写生成代码的程序时,尤其是从某种解析器中生成代码时,像这样的基于堆栈的工具dc
可能更容易处理(实际上原始版本bc
是前端的解析器dc
)。