Delphi x32 和 x64,(typecast?)将字节数组转换为(宽)字符串



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

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

mystrvar := widestring(buffer);

其中缓冲区是字节数组。

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

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

我不使用 pwchar 的原因是;PWCHAR(buffer( 中断 00,而宽字符串(buffer( 不中断。此缓冲区(字节数组(包含由 (00( 分隔的字符串列表。

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

使用

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

假设

VAR
  mystrvar : WideString;
  buffer: ARRAY OF BYTE;

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

假设您的数组是双精度 Null 终止,您可以使用以下内容:

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

最新更新