我正在尝试将十六进制字符串转换为二进制。我正在使用:
echo "ibase=16; obase=2; $line" | BC_LINE_LENGTH=9999 bc
Run Code Online (Sandbox Code Playgroud)
它会截断前导零。也就是说,如果十六进制字符串为4F,则将其转换为1001111;如果为0F,则将其转换为1111。我需要的是01001111和00001111
我能做什么?
的输出bc是正确的;它根本不是您的想法(但这是设计人员的bc想法)。如果您将十六进制转换4F为十进制,您不会期望从中得到 079,对吗?如果输出基数是二进制的,为什么要获得前导零?简短的回答:你不应该,所以bc不会发出它们。
如果必须使二进制输出为 8 位的倍数,则可以使用其他工具添加适当数量的前导零,例如awk:
awk '{ len = (8 - length % 8) % 8; printf "%.*s%s\n", len, "00000000", $0}'
Run Code Online (Sandbox Code Playgroud)