Scripting
如何在 korn shell 中將文本或字元轉換為十六進制
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[*]}"
請注意, in
ksh93
為printf '%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
中,當命令是內置的時,不涉及創建管道和分叉子外殼,因此它相對有效。