如何字节数组转换为变(How to convert Array of bytes to Varian

2019-07-03 11:26发布

如何转换一个字节数组变量? 我有应该接收的字节数组一个WebService,但是它只接受VARIANT类型的变量,我不知道怎么做才能把它作为参数的Web服务转换。

谢谢

Answer 1:

根据注释线索,你需要创建一个SAFEARRAY字节。 这是德尔福这样做:

V := VarArrayCreate([0, N-1], varByte);

或者,如果SAFEARRAY基于需要1索引:

V := VarArrayCreate([1, N], varByte);

然后,可以使用填充在一个循环中该阵列V[i] := ...

如果你有一个德尔福动态array of Byte ,并预期SAFEARRAY使用基于0的索引,那么你可以简单地写:

V := a;

如果你有大量的数据通过元素戳了RTL提供数据的传输则该元素是几乎无望。 甚至简单的v := a在元件方法导致由元件复制,这将是对大量数据的可怕缓慢。

在你的位置,我的blit一气呵成阵列。 像这样:

var
  i: Integer;
  a: array of Byte;
  V: Variant;
  SafeArray: PVarArray;
....
// populate a
V := VarArrayCreate([0,high(a)], varByte);
SafeArray := VarArrayAsPSafeArray(V);
Move(Pointer(a)^, SafeArray.Data^, Length(a)*SizeOf(a[0]));

或者,如果你需要使用基于1的索引:

V := VarArrayCreate([1,Length(a)], varByte);
SafeArray := VarArrayAsPSafeArray(V);
Move(Pointer(a)^, SafeArray.Data^, Length(a)*SizeOf(a[0]));


文章来源: How to convert Array of bytes to Variant