[PHP] Jak zamienić liczby na kod BCD (Binary Coded Decimal)?
Chcesz zamienić ciąg liczb dziesiętnych na kod BCD (Binary Coded Decimal),
np. 12345 = 0001 0010 0011 0100 0101
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.