您好,欢迎来到保捱科技网。
搜索
您的当前位置:首页【delphi】Byte数组与String类型的转换

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

来源:保捱科技网
【delphi】Byte数组与String类型的转换

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

  string与string[]不⼀样,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;

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baoaiwan.cn 版权所有 赣ICP备2024042794号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务