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

string转为字节数组

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

【delphi】Byte数组与String类型的转换的更多相关文章

  1. 【转】java中byte数组与int类型的转换(两种方式)----不错

    原文网址:http://blog.csdn.net/piaojun_pj/article/details/5903009 java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法, ...

  2. 字节数组与String类型的转换

    还是本着上篇文章的原则,只不过在Delphi中string有点特殊! 先了解一下Delphi中的string 1. string = AnsiString = 长字符串,理论上长度不受限制,但其实受限 ...

  3. 深入 JAVA里面关于byte数组和String之间的转换问题

    把byte转化成string,必须经过编码.  例如下面一个例子:  importjava.io.UnsupportedEncodingException; publicclass test{ pub ...

  4. java里面byte数组和String字符串怎么转换

    //string 转 byte[] String str = "Hello"; byte[] srtbyte = str.getBytes(); // byte[] 转 strin ...

  5. java中byte数组与int类型的转换(两种方式)

    http://blog.csdn.net/z69183787/article/details/38564219 http://blog.csdn.net/z69183787/article/detai ...

  6. byte[] 数组和字符串的转换,与byte[] 数组和int类型的之间的转化

    我们先来看看byte bool  int ushort  等的定义 首先时byte[]数组与string之间的转换 string 转换位byte[] 数组 string str = "1-1 ...

  7. C#中字节数组byte[]和字符串string类型的相互转换

    C#中字节数组byte[]和字符串string类型的相互转换: string转byte[]: byte[] byteArray = System.Text.Encoding.Default.GetBy ...

  8. C# byte[]数组和string的互相转化 (四种方法)

    C# byte[]数组和string的互相转化 (四种方法) 第一种 [csharp] view plain copy string str = System.Text.Encoding.UTF8.G ...

  9. java byte数组与String互转

      java byte数组与String互转 CreationTime--2018年7月6日14点53分 Author:Marydon 1.String-->byte[] 方法:使用String ...

随机推荐

  1. mysql中日志的配置与分析

    默认情况下,如果日志没有配置,则只记录错误日志,记录到syslog,配置文件 /etc/mysql/conf.d/mysqld_safe_syslog.cnf (ubuntu下) [mysqld_sa ...

  2. 使用Dockerfile文件构建基于centOS系统的nodejs镜像

    实际示例: [root@node01 node]# ls dev-web dev-web.tar.gz Dockerfile node-v8.14.0-linux-x64.tar.gz package ...

  3. (原+译)pytorch中保存和载入模型

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/8108466.html 参考网址: http://pytorch.org/docs/master/not ...

  4. TCP/IP 详解7 Ping指令

    首先介绍一下ping 指令的基本过程:(这部分摘自网络) 我们以下面一个网络为例:有A.B.C.D四台机子,一台路由RA,子网掩码均为255.255.255.0,默认路由为192.168.0.1 1. ...

  5. Mac MySQL 数据库管理(关系型数据库管理系统)

    1.管理准备工作 1)管理数据库准备工作 下载相关软件 mysql-workbench-community-6.3.10-macos-x86_64.dmg Oracle 官网 MySQL 官网 MyS ...

  6. 第一篇:初识ASP.NET控件开发_第三节:“生死有序”的控件生命周期

    一.Page本质是一个Control 我们首先要澄清的第一个概念是页面类Page本质是一个控件类,它派生于TemplateControl类,而TemplateControl派生自Control类.既然 ...

  7. 简单示例:Spring4 整合 单个Redis服务

    1. 引入spring-data-redis.jar API:https://docs.spring.io/spring-data/redis/docs/current/api/org/springf ...

  8. mysql出现Too many connections的解决...

    最近写javaee项目的时候,mysql报了too many connections的错误,百度的内容有一些有问题,所以我重新写一下我的解决方法. mysql -u root -p 回车输入密码进入m ...

  9. 大家来找茬:富连网今天中午抢购二手iPhone时网站无法访问的问题

    前几天在新闻区看到富士康卖二手iPhone的新闻,今天又看到说今天中午12点开抢.一大早就发现富连网无法访问了.前几天刚看到新闻的时候注册了个账号进去看了看,发现页面加载速度非常慢,今天中午基本无法打 ...

  10. jeecg删除菜单导致角色权限设置点不开的问题解决

    在JEECG中经常需要删除一些菜单,但是由于当前使用版本jeecg3.7.1功能不够完善,需要手动去删除角色对应目录表的没删除干净的数据,要删除的数据查询SQL语句如下: select * from ...