【发布时间】:2011-03-03 16:30:29
【问题描述】:
如果我想声明一个 Byte 的静态编译时数组,我可以这样做:
var
bytes :array[0..24] of Byte = (1, 2, 3, .... );
但是,它的类型是字节数组[0..24],而不是System.TArray<System.Byte>,通常称为TBytes。
我需要的是 TBytes 类型的东西,但我不想添加一个初始化部分来以某种痛苦的方式保存这些字节值:
var
bytes2:TBytes;
initialization
SetLength(bytes2,24);
bytes2[0] := 1; bytes2[1] := 2; ....
有什么方法可以代替:
var
bytes2:TBytes = (1,2,3, .... );
我还试图找到一种方法来快速从 TBytes 转换(System.TArray<System.Byte>) 和 Byte 的数组 [0..24],如下所示:
bytes2 := byte;
不幸的是,我能得到的最接近的是这个蛮力代码:
SetLength(bytes2,Length(bytes));
for n := 0 to Length(bytes) do begin
bytes2[n] := bytes[n];
end;
在我看来,两种类型密切相关,编译器可以更好地允许我从一种类型强制或复制到另一种类型。其他人对各种类型的“X 数组”有这种感觉吗?知道任何很酷的方法吗?如果编译器做了一些魔术,它可能会使 Move(...) 函数在这种情况下工作,但 Move 实际上会给您带来访问冲突,并且不能与动态数组或泛型集合一起使用。
【问题讨论】: