Var Data,Data1:widestring;然后给Data:='abcdefgh'SetLength(FileOkBuf,Length(Data)+1);
copymemory(@FileOkBuf[0],@Data[1],length(Data));
FileOkBuf[length(FileOkBuf)-1]:=0;
Setlength(data1,length(data));
CopyMemory(@Data1[1],@FileOkBuf[0],length(data));
可是Data1却是乱码.
怎解???
copymemory(@FileOkBuf[0],@Data[1],length(Data));
FileOkBuf[length(FileOkBuf)-1]:=0;
Setlength(data1,length(data));
CopyMemory(@Data1[1],@FileOkBuf[0],length(data));
可是Data1却是乱码.
怎解???
Len: Integer;
Data,Data1, FileOkBuf:widestring;
begin
Data:='abcdefghiiii';
SetLength(FileOkBuf,Length(Data);
copymemory(PChar(FileOkBuf), PChar(Data),Len*2); Setlength(data1,length(data));
CopyMemory(PChar(Data1), PChar(FileOkBuf),length(data)*2);
ShowMessage(Data1);我试过这样可以,因为我用String是没有问题的,但是WideString,是双字节为一个单位的,所以你*2才可以。
WideChar在内存里占用两个字节~~
所以拷贝内存的时候要比string多一倍~~var
Data, Data1: WideString;
FileOkBuf: array of Byte;
begin
Data := 'cdefgh';
SetLength(FileOkBuf, Length(Data) * SizeOf(WideChar) + 1);
CopyMemory(@FileOkBuf[0], @Data[1], Length(Data) * SizeOf(WideChar));
FileOkBuf[Length(FileOkBuf) - 1] := 0;
SetLength(Data1, Length(data));
CopyMemory(@Data1[1], @FileOkBuf[0], Length(Data) * SizeOf(WideChar));
Caption := Data1;
end;
....
...