Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.02;
Скачать: CL | DM;

Вниз

Подскажите пожалуйста как преобразовать Hex->Bin   Найти похожие ветки 

 
Fresh   (2004-12-20 12:11) [0]

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

Делаю так:


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 абракадабра получается... а не единички и нолики :(

Как быть...


 
TUser ©   (2004-12-20 12:21) [1]

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


 
MacroDenS ©   (2004-12-20 12:57) [2]

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


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

>> MacroDenS ©

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


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

>> Всем

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


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;


 
TUser ©   (2004-12-20 13:26) [5]

Примерно так

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;


 
begin...end ©   (2004-12-20 14:14) [6]

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

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] всё же красивее, мне понравилось :-)



Страницы: 1 вся ветка

Текущий архив: 2005.01.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.052 c
1-1103222533
Dmitry_04
2004-12-16 21:42
2005.01.02
Определить какие файлы в папке


4-1100590952
Gefest
2004-11-16 10:42
2005.01.02
Как перехватывать нажатия клавиш?


9-1086684305
wiz
2004-06-08 12:45
2005.01.02
2d аркада (OpenGL). Очередной релизец


1-1103402586
Raider
2004-12-18 23:43
2005.01.02
Текст в RichEdit снизу вверх.


14-1101112981
ocean
2004-11-22 11:43
2005.01.02
эвакуация с парковки