我正在调试包含很多位移操作的代码,并且我经常使用 bc 来查看位级别上发生的情况。
这是我使用的:
$ echo 'obase=2;598980975283696640' | bc
100001010000000000100000011000000011000000000111010000000000
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以将输出作为空格分隔的半字节输出?例如
1000 0101 0000 0000 0010 0000 0110 0000 0011 0000 0000 0111 0100 0000 0000
Run Code Online (Sandbox Code Playgroud)
提前感谢您的回答!
编辑:感谢您的回复!然而,
我在另一个号码 262148 上试了一下。
应该:
100 0000 0000 0000 0100
Run Code Online (Sandbox Code Playgroud)
但它是:
1000 0000 0000 0000 100
Run Code Online (Sandbox Code Playgroud)
我猜脚本必须通过字符串向后搜索才能得到正确的结果?
echo 'obase=2;598123123980975281233696640' | BC_LINE_LENGTH=0 bc |
rev | fold -w4 | paste -sd ' ' - | rev
Run Code Online (Sandbox Code Playgroud)
或者:
echo 'obase=2;598123123980975281233696640' | BC_LINE_LENGTH=0 bc | sed ':1
s/\(.*[01]\)\([01]\{4\}\)/\1 \2/;t1'
Run Code Online (Sandbox Code Playgroud)
BC_LINE_LENGTH=0
是停止bc
在 70 列处包装数字。不过那是特定于 GNU 的。rev
不是标准命令,但很常见。