誰かがASCIIをbashで16進数に変換するのを手伝ってくれるかどうか疑問に思っていました。コード例:
#!/bin/bash
STR = "hello"
#Convert to hex
HEXVAL = $STR #(in hex here?)
hexvalに値を付けたい:68656C6C6F(16進数でこんにちは)
$ str="hello"
$ hex=$(xxd -pu <<< "$str")
$ echo "$hex"
6C6C6568A6F
または:
$ hex=$(hexdump -e '"%X"' <<< "$str")
$ echo "$hex"
6C6C6568A6F
に注意してください'"%X"'
; 一重引用符と二重引用符の両方があります。
これがワンライナーです(少し複雑ですが、うまく機能します):
#!/bin/bash
echo '0x'"`echo $1 | hexdump -vC | awk 'BEGIN {IFS="\t"} {$1=""; print }' | awk '{sub(/\|.*/,"")}1' | tr -d '\n' | tr -d ' '`" | rev | cut -c 3- | rev
xxd -p -u <<< "$STR" | sed 's/\(..\)/0x&, /g; s/, $//;'
0x68、0x65、0x6C、0x6C、0x6F、0x0A
文字列から印刷可能な16進シーケンスへの純粋なBASHコンバーターおよびその逆
str2hex_echo() {
# USAGE: hex_repr=$(str2hex_echo "ABC")
# returns "0x410x420x43"
local str=${1:-""}
local fmt="0x%x"
local chr
local -i i
for i in `seq 0 $((${#str}-1))`; do
chr=${str:i:1}
printf "${fmt}" "'${chr}"
done
}
hex2str_echo() {
# USAGE: ASCII_repr=$(hex2str_echo "0x410x420x43")
# returns "ABC"
echo -en "'${1:-""//0x/\\x}'"
}
説明
ASCII-> hex:文字からその基礎となるASCIIコードへの効率的な変換の秘訣はprintf
、非文字列形式の指定子を使用して、基礎となるASCIIコードを生成するために先頭の文字を一重引用符または二重引用符で囲むという特徴です。次のシンボル。この動作はGNUBASHリファレンスに記載されていますが、char-ASCII変換専用のGreg( GreyCatとも呼ばれます)のwikiページBashFAQ/071にある他の多くのすばらしいユーティリティと一緒に詳細に公開されています。
16進線出力のみ。テスト済み、両方のシステムで検証済み。
Linux:
$ echo 'hello' | hexdump -ve '/1 "%02x"'
68656c6c6f0a
マック:
$ echo 'hello' | xxd -p -c 256
68656c6c6f0a