gpt4 book ai didi

delphi-7 - 将缓冲区添加到 ByteArray

转载 作者:行者123 更新时间:2023-12-02 16:03:28 27 4
gpt4 key购买 nike

我使用 winsock 来接收 1024 字节的缓冲区,如下所示:

var
buffer : array[0..1023] of byte;
endarray : array of byte;
hFile : THandle;
dwWritten : DWORD;
dwRead : DWORD;
begin
SetLength (endarray, 3000); //fixxed size (doesn't really matter here, cause I know the size)
hFile := CreateFileW('test.bin', GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_NEW, 0, 0);
SetFilePointer(hFile, 0, nil, FILE_BEGIN);
repeat
dwRead := recv(MySock, Buffer, 1024, 0);
WriteFile(hFile, buffer[0], dwRead, dwWritten, nil); // works fine!
// Add the buffer to the endarray but how?
until (dwRead = 0) or (dwRead = -1)
[...]
CloseHandle (hFile);
end;

如何自动将缓冲区添加到 endarray 中,以便它实际上附加到末尾?

最佳答案

像这样:

var
PrevLen: Integer;
....
dwRead := recv(MySock, Buffer, 1024, 0);
if dwRead>0 then
begin
PrevLen := Length(endarray);
SetLength(endarray, PrevLen+dwRead);
Move(Buffer[0], endarray[PrevLen], dwRead);
end;

并从函数中删除预分配 endarray 的第一行代码。

如果您宁愿分配一次缓冲区(按照问题中的代码),那么您可以像这样编码:

var
endarrayLen: Integer;
.....
endarrayLen := 0;
repeat
dwRead := recv(MySock, Buffer, 1024, 0);
if dwRead>0 then
begin
Move(Buffer[0], endarray[endarrayLen], dwRead);
inc(endarrayLen, dwRead);
end;
.....
until ...

但是缓冲区溢出即将发生!

关于delphi-7 - 将缓冲区添加到 ByteArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11797186/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com