Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

hex

17K
29 июня 2007 года
vanyavl
23 / / 25.12.2006
Здраствуйте. Вот захотелось мне написать программу которая переводила б строку в hex
роясь в хелпе я нашел диво-функцию, которая преобразовует число в hex, вот пример кода
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
Label1.Caption := '';
  for i := 1 to Length(Edit1.Text) do
  begin
    try
      Label1.Caption := Label1.Caption + IntToHex(Edit1.Text,2) + ' ';
    except
      Beep;
    end;
  end;
end;

но у меня это дело не работает и выдает вот такую ошибку
Цитата:
there is no overloaded version of 'intohex' that can be called with these arguments


было б приятно если б она заработала? кто знает в чем проблема отпешитесь пожалуйста.

После этого я сам накатал программу, но она оказалась настолько громоздкой, что я решил ее не выкладывать.
Роясь в нете я нашел следующее Преобразование десятичного числа в шестнадцатиричное
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Text:=Format('%0x',[strtoint(edit1.Text)]);
end;

Но это не то что хотелось бы мне.
[COLOR="Red"]Ворос в следующем[/COLOR]
В php есть замечательная функция bin2hex. Она то как раз делает то что мне надо, вот код

 
Код:
<?
echo('0x'.bin2hex($str));
?>

Как мне тоже самое реализовать на Делфи?
303
29 июня 2007 года
makbeth
1.0K / / 25.11.2004
1. Ошибка говорит, что неправилен тип фактического аргумента который ты передаешь в IntToHex. Аргумент должен быть числовой, но не как не строковый.
2. Функция:
Цитата:
 
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Text:=Format('%0x',[strtoint(edit1.Text)]);
end;



Делает ровно тоже самое, что и твоя bin2hex ;)
Если написание не нравится, то, вот еще вариант:

 
Код:
funtion bin2hex(Num: String): string;
begin
    Result:=IntToHex(StrToInt(Num), 8);    
end;
17K
29 июня 2007 года
vanyavl
23 / / 25.12.2006
Цитата:
Делает ровно тоже самое, что и твоя bin2hex


не то же самое, ваша функция переводит только цыфрі десятичные в шестнадцатричную систему, а мне надо что б все символы, включая буквы переводились в HEX

247
29 июня 2007 года
wanja
1.2K / / 03.02.2003
intohex, говоришь? In To Hex?
17K
29 июня 2007 года
vanyavl
23 / / 25.12.2006
Цитата: wanja
intohex, говоришь? In To Hex?


InToHex переводит целое десятичное число в шестнадцатеричное.
А мне надо перевести строку в HEX, а функцию StrToHex к сажелению не придумали (

303
29 июня 2007 года
makbeth
1.0K / / 25.11.2004
Цитата: wanja
intohex, говоришь? In To Hex?


Э-э-э-э... ты енто к чему?

[quote=vanyavl] А мне надо перевести строку в HEX, а функцию StrToHex к сажелению не придумали ([/quote]Ну дык сразу бы и сказал :)
Тут надо немного подправить код с твоего первого поста:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
Label1.Caption := '';
  for i := 1 to Length(Edit1.Text) do
  begin
    try
      Label1.Caption := Label1.Caption + IntToHex([COLOR=red]Ord([/COLOR]Edit1.Text[COLOR=red])[/COLOR],2) + ' ';
    except
      Beep;
    end;
  end;
end;
17K
29 июня 2007 года
vanyavl
23 / / 25.12.2006
спасибо большое, как раз то что надо. А сложно реализовать обратную функцию перевода хекса в строку?
17K
10 июля 2007 года
vanyavl
23 / / 25.12.2006
написал функцию о переводу строки в хекс, вот пример:
123 переводит в 0x313233
потом написал обратную функцию, вот она
 
Код:
memo1.Text := '';
      if edit1.Text[1] + edit1.Text[2] = '0x' then
      begin
        for i := 3 to Length(Edit1.Text) do
        memo1.Text :=memo1.Text + Char(StrToInt('$' + Edit1.Text + Edit1.Text[i+1]));
      end;

она переводит правильно, но добавляет левые символы вот пример
0x313233 переводит в 1|2#3|
вместо | как я понял стоит табуляция, как єто исправить? тоесть сделать чистый вывод 123?
257
10 июля 2007 года
kosfiz
1.6K / / 18.09.2005
хм... ну если тебе подойдет то можно как то так:
Код:
function StrToHex(sstr: string):string;
var
  i: integer;
  stemp: string;
begin
stemp:='0x';
for i:=1 to length(sstr) do
  stemp:=stemp + IntToHex(Ord(sstr),2);
Result:=stemp;
end;

function HexToStr(shex: string):string;
var
  i: integer;
  stemp: string;
begin
shex:=copy(shex,3,length(shex)-2);
i:=1;
while i<=length(shex)-1 do
  begin
    stemp:=stemp + chr(StrToInt(shex)*16+StrToInt(shex[i+1]));
    i:=i + 2;
  end;
Result:=stemp;
end;

//пример использования:
var
  sstr, shex:string;
begin
readln(sstr);
shex:=StrToHex(sstr);
writeln(shex);
sstr:=HexToStr(shex);
writeln(sstr);
readln;
end.
17K
11 июля 2007 года
vanyavl
23 / / 25.12.2006
большое спасибо. функцию StrToHex можно было не писать. Аж невериться =\ моя ошибка была втом, что я цикл неправильно реализовал =\. еще раз спасибо
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог