delphi x32和x64,(类型转换?)字节数组到(宽)字符串

时间:2016-02-14 02:28:41

标签: arrays delphi

我从外部函数(dll)接收字节数组中的宽字符串。

将字节转换为字符串,我使用以下简单代码:

mystrvar := widestring(buffer);

其中buffer是字节数组。

当编译为32位时,它工作得很好,但是当为64位编译时,代码返回空字符串,而缓冲区(字节数组)在两种情况下都相同。

使用时也会发生同样的情况     mystrvar:= string(buffer); 而pchar(缓冲区)或pwchar(缓冲区)可以工作。

我不使用pwchar的原因是; pwchar(缓冲区)中断00而宽字符串(缓冲区)不中断。此缓冲区(bytearray)包含由(00)分隔的字符串列表。

顺便说一句,请原谅我的英语不好。

2 个答案:

答案 0 :(得分:0)

使用

SetString(mystrvar,buffer,LENGTH(buffer) DIV SizeOf(WideChar));

假设

VAR
  mystrvar : WideString;
  buffer: ARRAY OF BYTE;

那"缓冲"不包含尾随的零终止字节集。另请注意"缓冲区"是一个BYTE数组,因此缓冲区的长度是结果字符串长度的两倍。

答案 1 :(得分:-1)

假设您的数组是双Null终止,您可以使用:

while Buffer^ <> WideNull do
begin
  value := PWChar(Buffer);
  CommaText := CommaText + value + ',';
  Inc(Buffer, (Length(value) + 1)); 
end;