这是我的功能:
class function TCelebrity.ReadArray<T>(length:integer): byte;
var b:pointer;
begin
b := @Result;
if IndexR + SizeOf(T) * length > High(DataRead) + 1 then
raise Exception.Create('error');
Move(DataRead[IndexR],b,SizeOf(T) * length);
Inc(IndexR,SizeOf(T) * length);
end;
Run Code Online (Sandbox Code Playgroud)
IndexR是一个整数,DataRead是一个byte数组.
该函数从IndexR(位置)的DataRead读取长度.在我的情况下,它在位置0读取4个字节.
问题是我想调用这样的函数:
ar[5] := c.ReadArray<byte>(4); or - @ar[5] := c.ReadArray<byte>(4); //ar is Byte array
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用指向Byte数组的指针创建一个参数,但我想知道是否可以这样做?
编辑:
我也试过这个函数,它只改变了ar [5],它应该从ar [5]变为ar [8].
class function TCelebrity.ReadArray<T>(length:integer): byte;
var b:^byte; i:integer;
begin
b := @Result;
for I := 0 to length - 1 do
begin
b^ := DataRead[IndexR];
Inc(IndexR);
Inc(b);
end;
end; …Run Code Online (Sandbox Code Playgroud) 我写了一个函数,它将一个物理包中收到的两个或多个数据包分开.但是,编译器并不欣赏我的努力.每个数据包的大小都在数据包标头的前两个字节中,即6个字节.因此,一个真正的数据包=它的前两个字节+ 6.如果有多个数据包,我会发现这是多少.
procedure SeparatePackets(packet:pointer;size:word; out Result:Array of pointer; out number:byte);
var position:byte; //position
begin
position:= 0;
number:= 0;
SetLength(Result,0); //<< ERROR
while(PWord(Cardinal(packet) + position)^ + 6 <> size) do //while the first two bytes + 6(packet header)
begin
SetLength(Result,Length(Result) + 1); //inc the length << ERROR
Result[number] := Cardinal(packet) + position;
position := Result[number] + PWord(Cardinal(packet) + position)^ + 6;
inc(number);
end;
end;
Run Code Online (Sandbox Code Playgroud)
我用'<< ERROR'标记了编译时错误.错误是一个 - '不兼容的类型'.
我从来不知道在一个物理数据包中可能收到的数据包数量,所以如果数量增加,我想增加数组的长度.
我该如何解决我的错误?
我是网络开发的新手,我不知道有自动完成的编辑器.
我需要xhtml,jscript,jquery和css.
无论商业与否都没关系,那么SO上的顶级Web开发人员用于Web开发的是什么?
提前致谢!
XElement.Parse("<Style TargetType=\"TextBlock\" x:Key=\"LabelStyle\"><Setter Property=\"TextWrapping\" Value=\"Wrap\"/></Style>");
Run Code Online (Sandbox Code Playgroud)
抛出异常,为什么?
我想加入一个带有一些样式的XML文档,以便它在应用程序中正确呈现,因为文档错过了某些样式(即这个样式).