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

Вниз

HexToStr   Найти похожие ветки 

 
Blackweber   (2002-08-07 20:05) [0]

Привет.
У меня проблема преобразования строки запроса, при использовании метода 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)).
Вопрос: Почему?


 
SuperIgor   (2002-08-07 21:53) [1]

Нашел тут алгоритм 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.
****


 
blackweber   (2002-08-07 23:43) [2]

что-то я не совсем понял насчет N1. Это вообще к чему?
Второй щас попробую, но ПАЛЮБОМУ спасибо.


 
Anatoly Podgoretsky   (2002-08-07 23:48) [3]

Это плохо, что ты не понял, а ты тогда просто попробуй


 
blackweber   (2002-08-08 02:49) [4]

>N1
Я бы наверно понял если бы не ThatHexString и a.
>Anatoly Podgoretsky
А насчет моей ф-ции ничего сказать неможете?


 
Anatoly Podgoretsky   (2002-08-08 08:00) [5]

Вот тебе насчет твоей функции

SuperIgor © (07.08.02 21:53)
s := "$" + ThatHexString;
i := StrToInt(a);

или проще StrToInt("$" + HexString);


 
blackweber   (2002-08-10 00:20) [6]

Все понял, большое спасибо.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.08.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.007 c
3-70954
Ruslan_55
2002-08-01 14:02
2002.08.22
Снова о добавлении записей из внешней таблицы...


1-71081
michael_b
2002-08-12 10:32
2002.08.22
есть ли функция обратная Trim


3-71012
Boo
2002-07-31 23:16
2002.08.22
BLOB поля в MSSQL2000


14-71321
jessis
2002-07-26 15:22
2002.08.22
Компиляция


4-71439
serd_hhc
2002-06-15 08:45
2002.08.22
Wininet и закачка файлов.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский