-6ren">
gpt4 book ai didi

linux - 将制表符打印为十六进制

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:45:33 25 4
gpt4 key购买 nike

在受限的 shell 中,我只能执行 printf(没有 awk、hexdump、xxd 等),所以我使用这个脚本将文件打印为十六进制:

a=$(<file.txt)
for ((i=0;i<${#a};i++));
do c=${a:$i:1};
if [[ $c == ' ' ]]; then printf "%X" \'\ \';
elif [[ $c == $'\r' ]]; then printf "%X" \'\r\';
elif [[ $c == $'\t' ]]; then printf "%X" \'\t\';
elif [[ $c == $'\n' ]]; then printf "%X" \'\n\';
else printf %02x \'${a:$i:1};
fi;
done

问题:最后一行 (printf %02x\'${a:$i:1}) 不适用于某些字符,例如\s,\r,\n,\t,...我用 (printf "%X"\'\\') 处理空格字符,但不适用于\r、\t 和\n

printf "%X" \'\t\' ---> 74
printf "%X" "'\t" ---> 5C
printf "%X" \'$"\t"---> 5C

但它应该返回 09!

最佳答案

我从中得到 9

printf "%X" \'$'\t'

引用表达式应该简化代码,不需要 ifs:

a=$(<file.txt)
for (( i=0 ; i < ${#a} ; i++ )) ; do
c=${a:$i:1}
printf %02x \'"$c"
done

关于linux - 将制表符打印为十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46955651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com