Scripting

如何在 korn shell 中將文本或字元轉換為十六進制

  • January 22, 2019

unix korn shell 是否提供將文本或字元轉換為十六進制的功能,例如。十六進制 31 32 37 33 34 35 35 36 36 37 字元值 1273455667 在這裡我已經編寫了要顯示的程式碼,但我不知道如何將結果儲存在變數中

str=1273455667

for (( i=0; i < ${#str}; i++ ))
do
c=${str:$i:1}
if [[ $c == ' ' ]]
then
printf "[%s] %X\n" " " \'\ \'
else
printf "[%s] %X\n" "$c" \'$c\'
fi
done

如果你有hexdump(這很可能),你可以做這樣的事情:

$ echo "Hello, world!" | hexdump -v -e '/1 "[%_c]: "' -e '/1 "%02X\n"'
[H]: 48
[e]: 65
[l]: 6C
[l]: 6C
[o]: 6F
[,]: 2C
[ ]: 20
[w]: 77
[o]: 6F
[r]: 72
[l]: 6C
[d]: 64
[!]: 21
[\n]: 0A

對於一個簡單的空格分隔的十六進制轉儲到一個變數:

$ v=$(printf %s 1273455667 | hexdump -v -e '/1 "%02X "')
$ echo "$v"
31 32 37 33 34 35 35 36 36 37
str=1273455667
unset hex_values
for (( i=0; i < ${#str}; i++ )); do
 c=${str:i:1}
 hex_values+=($(printf "%X" "'$c"))
done

echo "${hex_values[*]}"

請注意, inksh93printf '%X\n' "'$character"您提供字元的程式碼點,而不是在目前編碼中形成該字元的字節的十六進制值。在這方面,它與od -An -vtx1.

例如,在 UTF-8 語言環境中,對於 €(在 UTF-8 中編碼為 e2 82 ac),它將給出 20ac(歐元符號的 unicode 程式碼點),而不是 e2 82 ac。

od如果您將語言環境強制設置為 C(使用export LC_ALL=C),您可以獲得與中相同的行為。

在這裡,我們使用命令替換 ( $(...)) 來檢索命令的輸出。在ksh93中,當命令是內置的時,不涉及創建管道和分叉子外殼,因此它相對有效。

引用自:https://unix.stackexchange.com/questions/136534