【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

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);

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

对Short string 类型进行设置长度(专门针对其第 1 位进行设置)

对动态数组进行设置

把buf内容赋给AnsiString

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

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); string 转为字节数组 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]]);

QQ联系方式:lcw@v.gg 欢迎联系十狼

出处: lcw.cnblogs.com

邮箱:wwwlllll@126.com

本文申明:本文版权归作者和博客园共有,欢迎转载,转载请注明出处.

UTF-8 GBK UTF8 GB2312之间的区别和关系,Java中String和byte[]间的转换,byte 是怎样转为汉字,汉字转byte的;char与
UTF-8 GBK UTF8 GB2312之间的区别和关系,Java中String和byte[]间的转换,byte 是怎样转为汉字,汉字转byte的;char与
知识分享之Golang——常用的类型转换int、string、float互相转换
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。 知识分享系列目前包含Java、Golang、Linux、Docker等等。
C/CPP中int和string的互相转换详解与多解例题分析
C标准库atoi, atof, atol, atoll(C++11标准) 函数,以及sprintf、sscanf函数,用sstream类,实现C++中int和string的互相转换
Qt实用技巧:QString、LPCWSTR、std::string之间的转换(持续补充)
Qt实用技巧:QString、LPCWSTR、std::string之间的转换(持续补充)
[-] .\Navicat-Cracker NavicatCrackerDlg.cpp:332 -3All patch solutions are suppressed. Patch abort!HI