ansistring和unicode的序列和还原

ansistring和unicode序列

delphi2009以前的所有版本,默认字符串都是ansistring,字符串中的一个字符刚好就是一个字节。

后面的DELPHI版本,默认字符串是unicode,字符串中的一个字符不再是一个字节。

那么,可以写一个通用的ansistring和unicode序列函数,让它适配所有的delphi版本。

FValue: TBytes;

1
2
3
4
5
6
7
8
9
10
11
12
13
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;

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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;

  

posted @   delphi中间件  阅读(340)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2016-09-23 FIREDAC连MYSQL中文乱码的解决办法
2016-09-23 异步SOCKET分包和组包的一种通用算法
点击右上角即可分享
微信分享提示