我从外部函数(dll)接收字节数组中的宽字符串。
将字节转换为字符串,我使用以下简单代码:
mystrvar := widestring(buffer);
其中buffer是字节数组。
当编译为32位时,它工作得很好,但是当为64位编译时,代码返回空字符串,而缓冲区(字节数组)在两种情况下都相同。
使用时也会发生同样的情况 mystrvar:= string(buffer); 而pchar(缓冲区)或pwchar(缓冲区)可以工作。
我不使用pwchar的原因是; pwchar(缓冲区)中断00而宽字符串(缓冲区)不中断。此缓冲区(bytearray)包含由(00)分隔的字符串列表。
顺便说一句,请原谅我的英语不好。答案 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;