Практически все конвертеры для bash представленные в интернет, конвертирующие hex в bin, это шлак.
Почему шлак? Потому что они на конвертации теряют или старшие биты или весь старший полубайт целиком.
Зачем это нужно?
Во-первых теория:
- Байт в hex представлен двумя полубайтами. И это всегда двухсимвольное значение. Без каких-либо исключений.
Когда это нужно?
В частности при проверке или пересчёте edid. В той части его спецификации, где используются полубайты. Или описываются биты.
Единственный правильный конвертер hex2bin, описан функцией bash h2b() у немцев:
https://km.kkrach.de/p_bash_conversionКоторая должна быть описана в .bashrc.
Немцы сделали очень грамотно.
На мой взгляд единственная его проблема в том, что например двухбайтный bin, он выводит полубайтами разделёнными точками как например 0000.0110.0010.0100.
Я бы эту функцию разделил бы на две. Автодополнение при вызове функции, обрабатывается Tab -ом.
Подправленный шелл-код оригинала:
h2b-array()
h2b-array(){
[ -z "$1" -o "$1" = "-h" ] && echo "h2b: Converts HEX to binary" && return 0
INPUT=`echo "${@^^}" | sed 's/^0X//'` # uppercase
LENGTH=`echo $INPUT | wc -c`
printf "%$(($LENGTH * 4 - 4))s\n" "$(echo "ibase=16; obase=2; $INPUT" | bc)" | sed 's/ /0/g'
}
$ h2b-array 010a010a
00000001000010100000000100001010
$ h2b-array 010a010a | wc -L # Количество бит
32
и h2b-human()
h2b-human(){
[ -z "$1" -o "$1" = "-h" ] && echo "h2b: Converts HEX to binary" && return 0
INPUT=`echo "${@^^}" | sed 's/^0X//'` # uppercase
LENGTH=`echo $INPUT | wc -c`
printf "%$(($LENGTH * 4 - 4))s\n" "$(echo "ibase=16; obase=2; $INPUT" | bc)" | sed 's/ /0/g' | sed 's/\([0-9][0-9][0-9][0-9]\)/\1 /g' | sed 's/\.$//'
}
$ h2b-human 010a010a
0000 0001 0000 1010 0000 0001 0000 1010
Первый удобен при математически операциях. Второй выглядит по-человечески, но в традиционной нотации. И удобно при анализе. В теории, это можно подправить для как отдельным шелл-скриптом. Скажем для опакечивания.
Но в общем и целом, немцы сделали очень грамотно. Пять баллов. Весьма грамотно. Полезная вещь.
Загнал сюда. На всякий. Чтобы не потерялось. В массе программного мусора в интернет, найти это, чрезвычайно сложно.