Попытка перемещения Delphi 2007
проект XE4
. В Delphi 2007
Я использовал функцию, которая считывает массив байтов из сокета напрямую с помощью Indy
. Я прошел AnsiString
отлиты в массив байтов в параметре вар этой функции:Использование AnsiString как байт массива в Delphi XE4
var data:AnsiString;
AContext.Connection.IOHandler.ReadBytes(TIDBytes(Data), PacketLength-PacketLengthDelta-1, False);
В Dlphi XE
когда я пытаюсь concatinate Data
на другую строку, я получил access violation
ошибку.
Теперь я пытаюсь моделировать эту проблему более простой код:
TIdBytes = array of Byte;
procedure fill(var b: TIDBytes);
begin
setlength(b,5);
b[0]:=61;
b[1]:=61;
b[2]:=61;
b[3]:=61;
b[4]:=61;
//original function used move function
end;
procedure TMainForm.FormCreate(Sender: TObject);
var s: ansistring ;
begin
fill(TIDBytes(s));
Showmessage(s);
end;
Теперь я ожидал увидеть что-то вроде ====
в окне сообщения, но я получил пустую. Я предположил, что XE AnsiString действует так же, как Delphi 2007 Ansistring, и вы можете использовать их как массив байтов в обоих случаях.
Каков наилучший способ решить проблему с AnsiString с байтами?
Или , используйте функцию 'BytesToString()' Indy'. Или лучше, используйте 'TIdIOHandler.ReadString()' вместо 'TIdIOHandler.ReadBytes()' и пусть Indy обрабатывает преобразование байтов в строку для вас. –