Debian fórum

Dotazy => Programování => Téma založeno: Le_Ze kdy 13. 02. 2018, 20:09:22

Název: Hexadecimal to binari
Přispěvatel: Le_Ze kdy 13. 02. 2018, 20:09:22
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
Název: Re:Hexadecimal to binari
Přispěvatel: Roman Horník kdy 14. 02. 2018, 01:49:44
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
Název: Re:Hexadecimal to binari
Přispěvatel: Le_Ze kdy 14. 02. 2018, 08:37:46
Moc děkují za rychlou odpověď ale asi něco je špatně.
Když je stav registru 0x00, tak to nic nevypíše..



Název: Re:Hexadecimal to binari
Přispěvatel: Roman Horník kdy 14. 02. 2018, 10:12:01
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.
Název: Re:Hexadecimal to binari
Přispěvatel: Le_Ze kdy 14. 02. 2018, 21:32:15
(https://s17.postimg.org/d0fdexi8v/d_kuj.gif)