Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.22;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.007 c
1-71128
andrey_pst
2002-08-13 09:57
2002.08.22
Получение имен неизвестных файлов.


14-71365
greenrul
2002-07-27 19:01
2002.08.22
Посоветуйте книжку для новичка по РНР+MySQL


4-71447
Andrew_k
2002-06-20 15:26
2002.08.22
Как найти следующий RichEdit?


1-71088
kronprince
2002-08-12 12:28
2002.08.22
TClientDataSet ->CommandText changes are not allowed


1-71161
BigVova
2002-08-13 14:06
2002.08.22
Word document to Stream





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