Подтвердить что ты не робот

Bash ascii до hex

интересовался, может ли кто-нибудь помочь мне с преобразованием ascii в hex в bash. Пример кода:

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

Я хочу иметь значение hexval: 68656C6C6F (hello in hex)

4b9b3361

Ответ 1

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

Или:

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

Осторожно с помощью '"%X"'; он имеет как одинарные кавычки, так и двойные кавычки.

Ответ 3

здесь один лайнер (немного сложный, но отлично работает):

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

Ответ 4

Чистый 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 page BashFAQ/071, посвященный преобразованиям char -ASCII.