Главная страница
    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.033 c
14-1102883236
Mihey_temporary
2004-12-12 23:27
2005.01.02
Соответствие кода стандартам HTML 4.01


3-1102325571
ksa2002
2004-12-06 12:32
2005.01.02
Вопрос по IBDataset


1-1103207093
Bless
2004-12-16 17:24
2005.01.02
Что вызывается вместо inherited в данном случае?


14-1103107327
AlexG
2004-12-15 13:42
2005.01.02
Чего мне добавить, чего убрать?


9-1094399653
Колбасьев
2004-09-05 19:54
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский