hex
роясь в хелпе я нашел диво-функцию, которая преобразовует число в hex, вот пример кода
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;
но у меня это дело не работает и выдает вот такую ошибку
было б приятно если б она заработала? кто знает в чем проблема отпешитесь пожалуйста.
После этого я сам накатал программу, но она оказалась настолько громоздкой, что я решил ее не выкладывать.
Роясь в нете я нашел следующее Преобразование десятичного числа в шестнадцатиричное
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Text:=Format('%0x',[strtoint(edit1.Text)]);
end;
Но это не то что хотелось бы мне.
[COLOR="Red"]Ворос в следующем[/COLOR]
В php есть замечательная функция bin2hex. Она то как раз делает то что мне надо, вот код
echo('0x'.bin2hex($str));
?>
Как мне тоже самое реализовать на Делфи?
2. Функция:
begin
memo1.Text:=Format('%0x',[strtoint(edit1.Text)]);
end;
Делает ровно тоже самое, что и твоя bin2hex ;)
Если написание не нравится, то, вот еще вариант:
begin
Result:=IntToHex(StrToInt(Num), 8);
end;
не то же самое, ваша функция переводит только цыфрі десятичные в шестнадцатричную систему, а мне надо что б все символы, включая буквы переводились в HEX
InToHex переводит целое десятичное число в шестнадцатеричное.
А мне надо перевести строку в HEX, а функцию StrToHex к сажелению не придумали (
Э-э-э-э... ты енто к чему?
[quote=vanyavl] А мне надо перевести строку в HEX, а функцию StrToHex к сажелению не придумали ([/quote]Ну дык сразу бы и сказал :)
Тут надо немного подправить код с твоего первого поста:
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;
123 переводит в 0x313233
потом написал обратную функцию, вот она
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?
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.