bash ascii到hex

时间:2012-10-11 19:46:49

标签: bash hex ascii

想知道是否有人可以帮助我在bash中将ascii转换为hex。 示例代码:

#!/bin/bash 
STR = "hello"
#Convert to hex
HEXVAL = $STR #(in hex here?)

我希望hexval具有以下值: 68656C6C6F(十六进制你好)

5 个答案:

答案 0 :(得分:24)

$ STR="hello"
$ HEXVAL=$(xxd -pu <<< "$STR")
$ echo "$HEXVAL"
6C6C6568A6F

或者:

$ HEXVAL=$(hexdump -e '"%X"' <<< "$STR")
$ echo "$HEXVAL"
6C6C6568A6F

小心'"%X"';它有单引号和双引号。

答案 1 :(得分:6)

你有几个选择

$ printf hello | xxd
0000000: 6865 6c6c 6f                             hello

另见: Ascii/Hex convert in bash

答案 2 :(得分:0)

这是一个班轮(有点复杂,但工作正常):

#!/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

答案 3 :(得分:0)

字符串的纯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-&gt;十六进制:从字符到其底层ASCII代码的高效转换的秘诀是printf中的特征,使用非字符串格式说明符,将前导字符作为单引号或双引号生成下一个符号的基础ASCII代码的命令。这种行为记录在GNU BASH reference中,但也与Greg的许多其他精彩实用程序(也称为GreyCat)维基页面{{3致力于char-ASCII转换。

答案 4 :(得分:0)

xxd -p -u <<< "$STR" | sed 's/\(..\)/0x&, /g; s/, $//;'

0x68、0x65、0x6C,0x6C,0x6F,0x0A