gpt4 book ai didi

bash - 如何将字符串转换为修改后的十六进制表示?

转载 作者:行者123 更新时间:2023-12-04 15:56:58 29 4
gpt4 key购买 nike

我想把一个字符串变成这样的

AaAa

进入

这样的字符串

%<41>%<61>%<41>%<61>

对于我熟悉的编程语言来说足够简单,但是对于 bash,我无法获得正确的管道来做我想做的事情:

  • 将字符串拆分为字符数组
  • 将每个字符转换为十六进制
  • 将每个十六进制值包装成 %<FF>
  • 连接字符串

这是我目前的方式,让我走到了一半:

echo -n "AaAa" | od -A n -t x1

最佳答案

如果你已经在使用od

printf "%%<%s>" $(od -A n -t x1<<<"AaAa")

对于没有 od 的全 bash,

while read -r -N 1 c; do printf "%%<%02X>" "$( printf "%d" \'$c )"; done <<< AaAa

这种方法的缺点是它为每个字符生成一个子shell,并假定为 ASCII/UTF8。


编辑

@Shawn 指出你不需要 subshel​​l -

while read -r -N 1 c; do printf "%%<%02X>" \'$c; done <<< AaAa

我注意到这些在您的输出中留下了字符串终止符,并意识到我可以通过将数据分配给变量并使用内置解析工具来消除它和 read

$: x=AaAa && for((i=0;i<${#x};i++)); do printf "%%<%02X>" \'${x:i:1}; done; echo
%<41>%<61>%<41>%<61>

关于bash - 如何将字符串转换为修改后的十六进制表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68504513/

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