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
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
Moc děkují za rychlou odpověď ale asi něco je špatně.
Když je stav registru 0x00, tak to nic nevypíše..
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.
(https://s17.postimg.org/d0fdexi8v/d_kuj.gif)