二进制输出的格式

时间:2014-09-23 05:20:45

标签: bash binary format

我尝试使用BIN=$(echo "obase=2; ibase=16; $i" | bc )进行转换。 我的输出是示例1000000100000011110000110000010。我需要工作(按视图检查),从第11位开始。 我需要输出格式为(ex):1000 0010 0000 1111......

可以寻求帮助吗?感谢

2 个答案:

答案 0 :(得分:1)

使用Ruby One-Liner

如果您只想将二进制文件拆分为4位数块,则可以使用任何理解{}区间运算符的语言。你的里程可能因sed和awk而异,但perl和ruby总是支持操作员。

当然还有其他方法可以做同样的事情,但有些方法比其他方式更具可读性。 Ruby为这种字符串操作提供了非常干净和可维护的语法。

代码

BIN=1000000100000011110000110000010
echo "$BIN" | ruby -ne 'puts $_.scan(/\d{4}/).join " "'

输出

1000 0001 0000 0011 1100 0011 0000

答案 1 :(得分:1)

使用以下命令以4个

的块打印$ BIN
format=`echo %0$(((${#BIN}%4 ? ${#BIN}/4 + 1 : ${#BIN}/4) * 4))d`
printf $format $BIN | sed 's/.\{4\}/& /g'

在第一行中,我们使用

计算输出二进制值的长度
  

$ {#} BIN

然后在同一行中我们形成格式说明符。

例如,

0101 - %04d
1 - %04d
10010 - %08d

使用以$格式获得的格式说明符,printf打印前缀为0的二进制值,使字符串长度为4的倍数。

然后'sed'命令将字符串分成4个块。