Autor Téma: Hexadecimal to binari  (Přečteno 5169 krát)

Offline Le_Ze

  • Začátečník
  • **
  • Příspěvků: 33
    • Zobrazit profil
Hexadecimal to binari
« 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

Offline Roman Horník

  • Hlavní moderátor
  • Aktivní­ uživatel
  • *****
  • Příspěvků: 1.473
    • Zobrazit profil
Re:Hexadecimal to binari
« Odpověď #1 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:
Kód: [Vybrat]
$ stavregistru="0xAA"; bc <<< "ibase=16; obase=2; `tr -d '^0X' <<< ${stavregistru^^}`" | awk '{printf "%08d\n", $0}'
10101010
« Poslední změna: 14. 02. 2018, 01:57:52 od Roman Horník »
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

Offline Le_Ze

  • Začátečník
  • **
  • Příspěvků: 33
    • Zobrazit profil
Re:Hexadecimal to binari
« Odpověď #2 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..




Offline Roman Horník

  • Hlavní moderátor
  • Aktivní­ uživatel
  • *****
  • Příspěvků: 1.473
    • Zobrazit profil
Re:Hexadecimal to binari
« Odpověď #3 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:

Kód: [Vybrat]
$ 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.
« Poslední změna: 14. 02. 2018, 10:26:00 od Roman Horník »
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

Offline Le_Ze

  • Začátečník
  • **
  • Příspěvků: 33
    • Zobrazit profil
Re:Hexadecimal to binari
« Odpověď #4 kdy: 14. 02. 2018, 21:32:15 »