Hexadecimal to binari

Založil Le_Ze, 13. 02. 2018, 20:09:22

Předchozí téma - Další téma

Le_Ze

Zdravím.
Mam expander, se kterého se čtou data v Hexadecimal
stavregistru=`sudo i2cget -y 1 0x20 0x00`
echo $stavregistru
Vrací 0xff

Bych to potřeboval do binary 00000000.

http://www.mathsisfun.com/binary-decimal-hexadecimal-converter.html
Hexadecimal ff to binary 11111111

Roman Horník

#1
bc <<< "ibase=16; obase=2; $(tr -d '0X' <<< "${stavregistru^^}")" | awk '{printf "%08d\n", $0}'

Protože BC nesnáší jednak malý písmena (a-f) a jednak 0x na začátku, 0x odstraňuje tr a ${promenna^^} převádí malý písmena na velký. Taky zahazuje "přebytečný" nuly na začátku, to řeší trubka do awk.

Výsledek:
$ stavregistru="0xAA"; bc <<< "ibase=16; obase=2; `tr -d '^0X' <<< ${stavregistru^^}`" | awk '{printf "%08d\n", $0}'
10101010
Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz

Le_Ze

Moc děkují za rychlou odpověď ale asi něco je špatně.
Když je stav registru 0x00, tak to nic nevypíše..




Roman Horník

#3
Protože bc uříznul jedinou nulu, která tam měla zůstat. No, uděláme malou prasečinu:

$ stavregistru="0xff"; bc <<< "ibase=16; obase=2; `tr -d 'X' <<< ${stavregistru^^}`" | awk '{printf "%08d\n", $0}'
11111111
$ stavregistru="0xEE"; bc <<< "ibase=16; obase=2; `tr -d 'X' <<< ${stavregistru^^}`" | awk '{printf "%08d\n", $0}'
11101110
$ stavregistru="0xaa"; bc <<< "ibase=16; obase=2; `tr -d 'X' <<< ${stavregistru^^}`" | awk '{printf "%08d\n", $0}'
10101010
$ stavregistru="0x55"; bc <<< "ibase=16; obase=2; `tr -d 'X' <<< ${stavregistru^^}`" | awk '{printf "%08d\n", $0}'
01010101
$ stavregistru="0x11"; bc <<< "ibase=16; obase=2; `tr -d 'X' <<< ${stavregistru^^}`" | awk '{printf "%08d\n", $0}'
00010001
$ stavregistru="0x00"; bc <<< "ibase=16; obase=2; `tr -d 'X' <<< ${stavregistru^^}`" | awk '{printf "%08d\n", $0}'
00000000


Teď tr neodebírá 0X, ale jen X, takže tam jedna nula navíc zůstane. Ale ta ničemu nevadí, funguje to.
Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz

Le_Ze