ansistring和unicode序列
delphi2009以前的所有版本,默认字符串都是ansistring,字符串中的一个字符刚好就是一个字节。
后面的DELPHI版本,默认字符串是unicode,字符串中的一个字符不再是一个字节。
那么,可以写一个通用的ansistring和unicode序列函数,让它适配所有的delphi版本。
FValue: TBytes;
procedure TMsgPack.setAsString(pvValue: string); begin FDataType := mptString; if SizeOf(Char) = 2 then //unicode begin SetLength(FValue, length(pvValue) shl 1); Move(PChar(pvValue)^, FValue[0], Length(FValue)); end else //ansistring begin SetLength(FValue, length(pvValue)); Move(PChar(pvValue)^, FValue[0], Length(FValue)); end; end;
function TMsgPack.getAsString: String; var len:Cardinal; begin len := Length(FValue); if SizeOf(Char) = 2 then //unicode begin SetLength(Result, len shr 1); Move(FValue[0],PChar(Result)^, len); end else //ansistring begin SetLength(Result, len); Move(FValue[0],PChar(Result)^, len); end; end;