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

【delphi】Byte数组与String类型的转换

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

string

  string = AnsiString = 长字符串,理论上长度不受限制,但其实受限于最大寻址范围2的32次方=4G字节;

  变量Str名字是一个指针,指向位于堆内存的字符序列,字符序列起始于@Str[1],@Str[1]偏移负16个字节的空间存储着字串长度、引用计数等信息。字符序列以NULL结束。

string[n]

  string[n] = ShortString = 短字符串,最多容纳255个字符,实际长度是字符长度+1,是Delphi的简单类型;

  Str[0]存储着字符的个数,第一个字符从Str[1]开始存放,不以NULL结束。

 

  只要理解这一理论,转string应该就不成问题了!

字节数组转string

  把buf内容赋给ShortString

var  
  buf: array[0..100] of byte;  
  str: string[32];//仅仅开辟了一个32个空间的内存,由于第1位没有用setlength初始化,导致长度不定  
  i  : Integer;  
begin  
 //如果在此处就对str进行赋值,str[0]位就有计数了,如果在使用之前没有对其进行使用,用SetLength进行赋值  
  for i := 50 to 81 do buf[i] := ord('A') + i -50;//测试数据  
  SetLength(str, 32);//设置str[0]=32;  
  Move(buf[50], str[1], 32);//内存复制  
  ShowMessage (str);  
end;  

  在这里重新认识一下SetLength,SetLength有2个功能

  1. 对Short string类型进行设置长度(专门针对其第1位进行设置)
  2. 对动态数组进行设置

  把buf内容赋给AnsiString 

  stringstring[]不一样,string是一个动态数组,还没有分配空间,而string[]已经预分配了空间,只不过str[0]处没赋初值,这时如果用Move的话会把Byte数组中的数据拷贝到string空间中,而string这时还没有分配内存,肯定会造成AV错误) 

var  
  buf: array[0..100] of byte;  
  str: string;  
  i  : Integer;  
begin  
  for i := 50 to 81 do buf[i] := ord('A') + i -50;  
  SetLength(str, 32);  
  Move(buf[50], str[1], 32);//注意,这里是从str[1]开始复制的  
  ShowMessage (str);  
end; 

string转为字节数组

var  
  buf: array[0..100] of byte;  
  str: string;  
  
begin  
  str:='abcdefg';  
  Move( str[1],buf[0], 32);//注意,这里是从str[1]开始复制的  
  ShowMessageFmt('$%.2d, $%.2d, $%.2d, $%.2d', [buf[3], buf[2], buf[1], buf[0]]);  
  
end;  

鲜花

握手

雷人

路过

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

请发表评论

全部评论

专题导读
上一篇:
DelphiSysUtils-SameText对比两个字符串是否相等发布时间:2022-07-18
下一篇:
Delphi实例分析:远程传输数据和文件发布时间: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