29

想知道是否有人可以帮助我将 bash 中的 ascii 转换为十六进制。示例代码:

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

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

4

6 回答 6

42
$ str="hello"
$ hex=$(xxd -pu <<< "$str")
$ echo "$hex"
6C6C6568A6F

Or:

$ hex=$(hexdump -e '"%X"' <<< "$str")
$ echo "$hex"
6C6C6568A6F

Careful with the '"%X"'; it has both single quotes and double quotes.

于 2012-10-11T19:50:41.460 回答
9

你有几个选择

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

另请参阅: bash 中的 Ascii/Hex 转换

于 2012-10-11T19:56:44.610 回答
1

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

#!/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
于 2014-01-19T10:32:47.303 回答
1
xxd -p -u <<< "$STR" | sed 's/\(..\)/0x&, /g; s/, $//;'

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

于 2020-02-18T03:15:17.400 回答
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->hex:从字符高效转换为其底层 ASCII 码的秘诀printf在于,使用非字符串格式说明符,将前导字符作为单引号或双引号作为生成底层 ASCII 码的顺序下一个符号。此行为记录在GNU BASH 参考中,但也与 Greg(也称为GreyCat的)wiki 页面BashFAQ/071中的许多其他精彩实用程序一起详细公开,专门用于 char-ASCII 转换。

于 2018-02-08T12:21:13.220 回答
0

仅十六进制线输出。经过测试,两个系统都经过验证。

Linux:

$ echo 'hello' | hexdump -ve '/1 "%02x"'
68656c6c6f0a

苹果电脑:

$ echo 'hello' | xxd -p -c 256
68656c6c6f0a
于 2021-12-21T05:26:42.943 回答