Raj*_*jiv 6 bash shell endianness
我需要一个shell脚本程序来打印从big endian到little endian的十六进制数
my virtual address = 00d66d7e7e6dd600我怎样才能在bash脚本中创建它?
Kar*_*ath 13
对于32位地址,假设它为零填充:
v=00d66d7e
echo ${v:6:2}${v:4:2}${v:2:2}${v:0:2}
# 7e6dd600
Run Code Online (Sandbox Code Playgroud)
hut*_*ano 12
根据Karoly的回答,您可以使用以下脚本,阅读管道输入:
#!/bin/bash
# check stdin
if [ -t 0 ]; then exit; fi
v=`cat /dev/stdin`
i=${#v}
while [ $i -gt 0 ]
do
i=$[$i-2]
echo -n ${v:$i:2}
done
echo
Run Code Online (Sandbox Code Playgroud)
例如,您可以将此脚本保存为endian.sh并使其可执行:
chmod u+x endian.sh
Run Code Online (Sandbox Code Playgroud)
然后:
echo 00d66d7e | ./endian.sh
Run Code Online (Sandbox Code Playgroud)
给你:
7e6dd600
Run Code Online (Sandbox Code Playgroud)
对于不同长度的字符串:
echo d76f411475428afc90947ee320 | ./endian.sh
Run Code Online (Sandbox Code Playgroud)
结果将是:
20e37e9490fc8a427514416fd7
Run Code Online (Sandbox Code Playgroud)
Bri*_*man 10
只是不得不这样做...但从十进制到小端..在这里适应:
echo 00d66d7e | tac -rs .. | echo "$(tr -d '\n')"
Run Code Online (Sandbox Code Playgroud)
对于无符号整数的任意大小的十六进制表示,实现了期望的结果.
(h/t'tac -rs'MestreLion,非常好!)