![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
HexToStr
Blackweber © (2002-08-07 20:05:00)Привет.
У меня проблема преобразования строки запроса, при использовании метода GET.Это например когда в Яндексе после адреса к поисковому скрипту идет?query=erfjnerkj. Так вот русские буквы и спец.символы кодируются в шестнадцатеричной системе, т.е. русская "б" это %E1.
Может кто-нибудь ответит на вопрос: если есть ф-ция IntToHex, почему нет ф-ции HexToInt?
Я нашел ф-цию StrtoIntDef, но как-то странно она(или я) работает.
Устав от поисков я использовал следующее:
function HexToStr(s:string):string;
var p:integer; c:byte;
const hex="0123456789ABCDEF";
begin
if s <> "" then begin
p := 1;
while p <= Length(s) do begin
if s[p] = "+" then s[p] := " "
else
if s[p] = "%" then
begin
c := 0;
if (p + 1) <= Length(s) then c := Pos(Upcase(s[p + 1]), HEX) shl 4;
if (p + 2) <= Length(s) then c := c or Pos(Upcase(s[p + 2]), HEX);
System.Delete(s, p + 1, 2);
if (c<>239)or(c<>207)then s[p] := char(c-17);{ else
case c of
239 : s[p]:=char(239); //////
207 : s[p]:=char(207); //////
end;}
end;
Inc(p);
end;
result:=s;
end;
Комментируемая часть у меня используется для поправки:
Все буквы за исключением "п"(char(239)) и "П"(char(207)) декодируются нормально, а эти в "Я"(char(223)) и "i"(char(191)).
Вопрос: Почему?
blackweber (2002-08-10 00:20:00) [1]Все понял, большое спасибо.
Anatoly Podgoretsky (2002-08-08 08:00:00) [2]Вот тебе насчет твоей функции
SuperIgor © (07.08.02 21:53)
s := "$" + ThatHexString;
i := StrToInt(a);
или проще StrToInt("$" + HexString);
blackweber (2002-08-08 02:49:00) [3]>N1
Я бы наверно понял если бы не ThatHexString и a.
>Anatoly Podgoretsky
А насчет моей ф-ции ничего сказать неможете?
Anatoly Podgoretsky (2002-08-07 23:48:00) [4]Это плохо, что ты не понял, а ты тогда просто попробуй
blackweber (2002-08-07 23:43:00) [5]что-то я не совсем понял насчет N1. Это вообще к чему?
Второй щас попробую, но ПАЛЮБОМУ спасибо.
SuperIgor (2002-08-07 21:53:00) [6]Нашел тут алгоритм HEX>>>Int
Может поможет.
№1
****
var
i : integer
s : string;
begin
s := "$" + ThatHexString;
i := StrToInt(a);
end;
****
№2
****
CONST HEX : ARRAY["A".."F"] OF INTEGER = (10,11,12,13,14,15);
VAR str : String;
Int,
i : integer;
BEGIN
READLN(str);
Int := 0;
FOR i := 1 TO Length(str) DO
IF str[i] < "A" THEN Int := Int * 16 + ORD(str[i]) - 48
ELSE Int := Int * 16 + HEX[str[i]];
WRITELN(Int);
READLN;
END.
****