интересовался, может ли кто-нибудь помочь мне с преобразованием ascii в hex в bash. Пример кода:
#!/bin/bash
STR = "hello"
#Convert to hex
HEXVAL = $STR #(in hex here?)
Я хочу иметь значение hexval: 68656C6C6F (hello in hex)
интересовался, может ли кто-нибудь помочь мне с преобразованием ascii в hex в bash. Пример кода:
#!/bin/bash
STR = "hello"
#Convert to hex
HEXVAL = $STR #(in hex here?)
Я хочу иметь значение hexval: 68656C6C6F (hello in hex)
$ STR="hello"
$ HEXVAL=$(xxd -pu <<< "$STR")
$ echo "$HEXVAL"
6C6C6568A6F
Или:
$ HEXVAL=$(hexdump -e '"%X"' <<< "$STR")
$ echo "$HEXVAL"
6C6C6568A6F
Осторожно с помощью '"%X"'
; он имеет как одинарные кавычки, так и двойные кавычки.
У вас есть несколько вариантов
$ printf hello | xxd
0000000: 6865 6c6c 6f hello
См. также: Преобразование Ascii/Hex в bash
здесь один лайнер (немного сложный, но отлично работает):
#!/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
Чистый 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.