Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2018-07-14 16:36:00 ЛС | профиль | цитата
1) Рассказывать, чем символ отличается от байта, кто из них настоящий, а кто есть выдумка яйцеголовых -- нет у меня уже здоровья на такие длинные опусы.

2) Текстовые данные, сделанные нами при разработке схемы, попадают в код программы не напрямую, а через некое дополнительное преобразование (где активно анализируются "обратные косые"). Сделано это для того, чтобы с помощью печатных символов можно было закодировать в программу и служебные тоже. Любые, в общем.
Это касается типов данных data_str и data_list. Текстовые данные типов data_script и data_code идут БЕЗ этого преобразования.

3) Конкретно, этим преобразованием занимается CodeGen.dll. А еще более конкретно - его функция ReplaceSChar.
И наконец, абсолютно конкретно, вот она:
function ReplaceSChar(const s:string):string;
var i,j,k,w:integer;
t:string;
begin
t := '';
i := 1;
while i<=Length(s) do begin
if (s[i] = '\')and(i < Length(s)) then begin
inc(i);
case s[i] of
'\': t := t + '\';
'n': t := t + #10;
'r': t := t + #13;
't': t := t + #9;
'0'..'9': begin
w := 0;
for j := 1 to 3 do begin //ограничение на текстовую длину числа
k := w*10 + ord(s[i]) - ord('0');
if k > 255 then break; //ограничение на величину числа
w := k; inc(i);
if i > Length(s) then break; //правая граница входной строки
if not(s[i] in ['0'..'9']) then break; //значит число кончилось
end;
dec(i); t := t + char(w);
end
else t := t + '\' + s[i];
end;
end else t := t + s[i];
inc(i);
end;
Result := StringToCode(t);
end;

4) В качестве примера "пережевывания обратных косых" можно посмотреть, чего получается, если в нашем примере оставить только первые три замены:
вырезка из hiMainForm_4A2DED0.pas

//Init for MultiReplace;
MultiReplace_5549A70 := THIMultiReplace.Create;
with MultiReplace_5549A70 do begin
_prop_ReplaceList := PChar('\ \'#10'20 \'#13#13#10'! '#10'21 \'#13#13#10'" '#10'22 \'#13#0);
_prop_Delimiter := PChar(#10#0);
_prop_EndSymbol := PChar(#13#0);
_prop_EnterTag := PChar(#0);
_prop_Mode := 1;
end;
карма: 9

0
Редактировалось 7 раз(а), последний 2018-07-14 19:20:49