А если мне нужна байтовая репрезентация строки? Начинать с нуля, или с единицы? Приведу пример...
- Код: Выделить всё
function urlencode(s:string):string;
var
i:integer;
begin
result:='';
for i:=1 to length(s) do
begin
if s[i] in [' '] then result:=result+'+' else
if s[i] in ['a'..'z','A'..'Z','0'..'9','!','?','-','.'] then result:=result+s[i] else
result:=result+'%'+inttohex(byte(s[i]), 2);
end;
end;
Функция отрабатывает, всё хорошо. Из слова "Привет" получается %D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82 Можно проверить, всё правильно, так и должно быть: yandex.ru/yandsearch?text=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82
А теперь сам прикол - в отладчике по ctrl+F7 первый байт строки, который я считываю как "s[1]", равен не D0, а 9F! А D0 - это байт с индексом s[0], опять же, в отладчике. Но в цикле я не читаю нулевой байт, я начинаю с первого! И по логике, этот код работать не должен. Но работает. Непонятно откуда же взялся D0, если он, якобы, находится в нулевой позиции, и я его вроде как не считываю???