• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

unicode 版本 delphi (如XE2)的 TBytes 转换为 AnsiString

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

unicode 版本 delphi (如XE2)的 TBytes 转换为 AnsiString

在这样的新版本中如果结果数据会有二进制会使用 TBytes 来操作,而 d7 中基本上就是用 string . 也许是因为新版本 AnsiString 与 string 赋值会丢失数据的原因所以大多数库都是用的 TBytes 操作二进制包括 delphi 本身和 indy 控件.这就有一个问题 TBytes 怎么转换成 AnsiString 呢? 不知道标准做法是什么,我是这样处理的.利用了 AnsiString 的指针就是内容缓冲区这一 hack 特性.当然大家知道标准做法的话还是按标准来的比较好.

 

function Base64ToStr(const Base64: AnsiString): AnsiString;
var
  buf:TBytes;
begin
  //Result := EncdDecd.DecodeString(Base64);Exit;//
  buf := EncdDecd.DecodeBase64(Base64);
  //ShowMessage(PAnsiChar(@buf[0]));


  //BytesToRaw(buf, head, SizeOf(TProtoHead));
  //Result := BytesToString(buf, TIdTextEncoding.ASCII);Exit;//不对,即使是用了 ASCII 仍然进行了转码,没法得到原始数据
  //Result := BytesToString(buf, TIdTextEncoding.UTF8);

  //Result := (PAnsiChar(@buf[0]));
  SetLength(Result, Length(buf));
  //SetAnsiString(@Result, @buf[0], Length(buf));
  //StrLCopy(PAnsiChar(result), @buf[0], Length(buf));//不行会在 #0 时出错
  CopyMemory(PAnsiChar(result), @buf[0], Length(buf));

end;


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
delphi 利用Tdatabase连接SQL server数据库详解发布时间:2022-07-18
下一篇:
Matlab中imshow函数发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap