[PHP] Jak zamienić liczby na kod BCD (Binary Coded Decimal)?

0x01 graphic

Chcesz zamienić ciąg liczb dziesiętnych na kod BCD (Binary Coded Decimal),
np. 12345 = 0001 0010 0011 0100 010
1

0x01 graphic

Kod BCD stosowany jest głównie w elektronice (przy układach cyfrowych) i umożliwia zapisanie każdej cyfry z ciągu cyfr dziesiętnych w postaci grupy 4-bitowej. W ten sposób każda liczba dziesiętna zakodowana zostaje do postaci dwójkowej z zerami wiodącymi.

Napiszmy taki konwerter:

<?

function bcd($liczba) {

if (!is_numeric($liczba)) return -1;

for($i=0;$i<strlen($liczba);$i++) {

$wynik .= str_pad(decbin($liczba[$i]),4,"0",STR_PAD_LEFT)." ";

}

return $wynik;

}

echo bcd("12345");

// wynik: 0001 0010 0011 0100 0101

?>

Funkcja sprawdza, czy przekazany parametr składa się z cyfr. Jeżeli tak, ze zmiennej $liczba pobierane są w pętli kolejne cyfry z łańcucha znaków.

Za pomocą funkcji decbin() zamieniam cyfrę dziesiętną na dwójkową, a funkcja str_pad() uzupełnia w liczbie binarnej brakujące z przodu znaki zerami (do czterech znaków).

Atrybut STR_PAD_LEFT powoduje, że zera dodawane są po lewej stronie liczby, czyli właśnie z przodu, a nie z tyłu.

W przypadku błedu w zapisie liczby, funkcja bcd() zwraca -1.