Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];

Вниз

Подскажите пожалуйста как преобразовать 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.034 c
1-1103125417
Чайник
2004-12-15 18:43
2005.01.02
Как создать объект по имени его класса


14-1102929078
dr Tr0jan
2004-12-13 12:11
2005.01.02
Почему inc(StringGrid1.RowCount) не работает,


14-1102779164
Человек
2004-12-11 18:32
2005.01.02
Music


11-1084644178
Константин
2004-05-15 22:02
2005.01.02
Где достать "exptIntf.dcu" для Delphi? (или пришлите)


1-1103312899
Megabyte
2004-12-17 22:48
2005.01.02
глюки в Дельфях





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский