String

bc 將二進制輸出為由空格分隔的半字節

  • January 2, 2015

我正在調試包含很多位移操作的程式碼,並且我經常使用 bc 來查看位級別上發生了什麼。

這是我使用的:

$ echo 'obase=2;598980975283696640' | bc
100001010000000000100000011000000011000000000111010000000000

有沒有一種簡單的方法可以將輸出作為空格分隔的半字節?例如

1000 0101 0000 0000 0010 0000 0110 0000 0011 0000 0000 0111 0100 0000 0000

提前感謝您的回答!

編輯:感謝您的回复!然而,

我在另一個號碼 262148 上試了一下。

應該:

100 0000 0000 0000 0100

但它是:

1000 0000 0000 0000 100

我猜腳本必須通過字元串向後搜尋才能正確?

我會使用這個簡單的功能:

nibbles () { echo "obase=2; $1" | bc | rev | while read -n4 a; do echo -n "$a ";done | rev ; echo; }

$ nibbles 598980975283696640
1000 0101 0000 0000 0010 0000 0110 0000 0011 0000 0000 0111 0100 0000 0000 
echo 'obase=2;598123123980975281233696640' | BC_LINE_LENGTH=0 bc |
 rev | fold -w4 | paste -sd ' ' - | rev

或者:

echo 'obase=2;598123123980975281233696640' | BC_LINE_LENGTH=0 bc | sed ':1
 s/\(.*[01]\)\([01]\{4\}\)/\1 \2/;t1'

BC_LINE_LENGTH=0是停止bc在 70 列處包裝數字。這是 GNU 特有的。rev不是標準命令,但很常見。

引用自:https://unix.stackexchange.com/questions/176958