如何将文件中的大端序(Big Endian)转换为小端序(Little Endian)?
大端序转小端序脚本优化
我需要将文件中的大端序(Big Endian)数据转换为小端序(Little Endian)。
示例数据
输入数据
000000000000200200DC082DED2DEDED051F4032400454036A9891D53C370101EA0A
期望输出
0AEA0101373CD591986A0354044032401F05EDED2DED2D08DC000220000000000000
现有问题
我找到的Shell脚本仅支持单次转换(比如处理单个字符串或单行输入),无法直接处理文件中的多行数据:
#!/bin/bash # check 1st arg or stdin if [ $# -ne 1 ]; then if [ -t 0 ]; then exit else v=`cat /dev/stdin` fi else v=$1 fi i=${#v} while [ $i -gt 0 ] do i=$[$i-2] echo -n ${v:$i:2} done
优化后的脚本
下面是修改后的脚本,支持处理文件(多行输入),每行独立进行端序转换:
#!/bin/bash # 处理输入:支持命令行参数指定文件,或从标准输入读取 input_source="${1:-/dev/stdin}" # 逐行处理 while IFS= read -r line; do # 跳过空行 [[ -z "$line" ]] && continue # 移除行内可能的空格(如果有的话) line=$(echo "$line" | tr -d '[:space:]') len=${#line} result="" # 从末尾开始每两位截取拼接 while [ $len -gt 0 ]; do len=$((len - 2)) result="${result}${line:$len:2}" done echo "$result" done < "$input_source"
使用方法
- 保存脚本为
endian_convert.sh,赋予执行权限:
chmod +x endian_convert.sh
- 处理单个字符串:
./endian_convert.sh <<< "000000000000200200DC082DED2DEDED051F4032400454036A9891D53C370101EA0A"
- 处理文件(比如
data.txt):
./endian_convert.sh data.txt
- 从管道读取输入:
cat data.txt | ./endian_convert.sh
内容的提问来源于stack exchange,提问作者Ketan
相关产品推荐
相关产品推荐

