Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подскажите пожалуйста как преобразовать Hex->Bin [D7, WinXP]


Fresh ©   (2004-12-20 12:11:00) 

Зравствуйте.

Делаю так:


procedure TForm1.Button1Click(Sender: TObject);
var
 binary: pchar;
begin
 pba := stralloc(255);
 HexToBin(pchar(edit1.Text), binary, 8);
 edit2.Text := binary;
 strdispose(binary);
end;


У меня в edit2 абракадабра получается... а не единички и нолики :(

Как быть...


begin...end   (2004-12-20 14:14:00) [1]

Вставлю и я свои пять копеек :-)

function HexToBin(Hex: String): String;
var
 Value: Cardinal;
begin
 Hex := '$' + Hex;
 try
   Value := StrToInt(Hex);
   while Value <> 0 do
   begin
     Result := IntToStr(Value mod 2) + Result;
     Value := Value div 2
   end
 except
   Result := EmptyStr
 end
end.


[4] всё же красивее, мне понравилось :-)


TUser   (2004-12-20 13:26:00) [2]

Примерно так

const hexs: array [0..15] of char =  
 {'0','1','2'...'9','a','b'...'f'};

{Вернет a -> 1010}
function MyHehToBin(S: string): string;
var i,j:integer;
   f:boolean;

function Bin(C: integer): string;
begin
  result:=0;
  while C > 0 do begin
    if C mod 2 = 0 then
      result:=result+'1'
      else
      result:=result+'0';
    C:=C shr 1;
    end;
  while length(result) < 4 do
    result:='0'+result;
end;

begin
 i:=1; result:=''; f:=true;
 while f and (i < length(S)) do begin
   j:=0; // f:=true;
   while f and (j < 16) do
     if hexs[j] = S[i] then
        f:=false
        else inc (j);
   f:=not f;
   if f then
     result:=result+Bin(j)
     else raise Exception.Create('Error in '+S);
   inc (i);
   end;
end;


Fresh   (2004-12-20 13:15:00) [3]

>> Всем

Если кому надо, вот функция:


function HexToBin(Hexadecimal: string): string;
const
 BCD: array [0..15] of string =
('0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111',
'1000', '1001', '1010', '1011', '1100', '1101', '1110', '1111');
var
 i: integer;
begin
 for i := Length(Hexadecimal) downto 1 do
   Result := BCD[StrToInt('$' + Hexadecimal[i])] + Result;
end;


Fresh   (2004-12-20 13:08:00) [4]

>> MacroDenS ©

Я то сам в таких вещах не силен. Не могли бы Вы исходничек подкинуть?


MacroDenS   (2004-12-20 12:57:00) [5]

А можно и самому функцию написать, дабы это не очень сложно.


TUser   (2004-12-20 12:21:00) [6]

HexToBin не для этого - помсотри его реализацию


Наверх

Титульная страница Поиск, карта сайта Написать письмо