function char2bin(c: char): string;
var
b, i: Byte;
result: string;
begin
b := Ord(c);
result := '';
//
for i := 1 to 8 do begin
//
if ($80 = (b and $80)) then
result := result + '1'
else
result := result + '0';
//
b := b shl 1;
end;
//
char2bin := result;
end;
$80 = десятичное 128 (можно вместо $80 написать 128). При преобразовании самое главное свойство числа — это байт, у которого в старшем разряде 1 (единица) т.е. если это число записать в двоичном виде получим:
10000000
В программе символ (в переменную b записывает код этого символа) поочередно делается побитное логическое И с маской. Если в нашем числе в старшем разряде единица то после AND получим число с единицей в старшем разряде, т.е. $80. Если получили — значит у нас единица, если нет (получится ноль) — значит в старшем разряде числа у нас был нолик.
Потом число сдвигаем побитно на один разряд влево и повторяем операцию.