如何用纯Linux/Shell命令实现4字节小端序整数二进制输出?
纯Shell/Linux命令实现4字节小端序输出
当然可以,以下是几种简便的实现方式:
方法1:Bash内置算术+printf
利用Shell位运算拆分整数的四个字节,再通过printf输出对应二进制字节:
n=$1 printf '\x%02x\x%02x\x%02x\x%02x' $((n & 0xff)) $(((n >> 8) & 0xff)) $(((n >> 16) & 0xff)) $(((n >> 24) & 0xff))
使用示例:bash convert.sh 123,输出即为整数123对应的4字节小端序二进制数据。
方法2:Awk实现
Awk支持二进制输出,通过位运算拆分字节后用printf输出:
echo "$1" | awk '{ num = $0 + 0 printf "%c%c%c%c", num&0xff, (num>>8)&0xff, (num>>16)&0xff, (num>>24)&0xff }'
使用示例:echo 123 | awk ...(直接执行上述语句),或保存为脚本运行。
方法3:printf+sed+xxd组合
先将整数转为8位十六进制字符串,反转字节顺序后再转回二进制:
printf "%08x" "$1" | sed 's/\(..\)\(..\)\(..\)\(..\)/\4\3\2\1/' | xxd -r -p
解释:
printf "%08x"将十进制整数转为8位十六进制(大端顺序,比如123对应0000007b)sed反转四个两位十六进制段,得到小端顺序的十六进制字符串7b000000xxd -r -p将十六进制字符串还原为二进制数据
注意:以上方法默认处理无符号32位整数(范围0~4294967295),若需处理有符号整数,调整位运算逻辑即可。
内容的提问来源于stack exchange,提问作者Vadim Kantorov
相关产品推荐
相关产品推荐

