Главная страница
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.054 c
1-1103359985
Hyboid
2004-12-18 11:53
2005.01.02
Библиотеки интерпретатора


1-1103280828
revo
2004-12-17 13:53
2005.01.02
Дйствительное число с плавающей запятой


1-1103179481
markers
2004-12-16 09:44
2005.01.02
Отчёты


6-1097940533
Kross
2004-10-16 19:28
2005.01.02
Оперделение доступных ресурсво по названию компьютера


14-1102681118
Чеширский_Кот
2004-12-10 15:18
2005.01.02
Складывается ощущение, что...