还是本着上篇文章的原则,只不过在Delphi中string有点特殊!

先了解一下Delphi中的string

1.

string = AnsiString = 长字符串,理论上长度不受限制,但其实受限于最大寻址范围2的32次方=4G字节,变量Str名字是一个指针,指向位于堆内存的字符序列,字符序列起始于@Str[1],@Str[1]偏移负16个字节的空间存储着字串长度、引用计数等信息。字符序列以NULL结束。
2.
string[n] = ShortString = 短字符串,最多容纳255个字符,实际长度是字符长度+1,是Delphi的简单类型,Str[0]存储着字符的个数,第一个字符从Str[1]开始存放,不以NULL结束。

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

//拿昨天一贴为例:需要将buf[50]-buf[81]的数组转为string[32] 一、字节数组转string 1. 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.对动态数组进行设置 2. 如果想把buf内容赋给string(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;

字节数组与String类型的转换相关推荐

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

    string string = AnsiString = 长字符串,理论上长度不受限制,但其实受限于最大寻址范围2的32次方=4G字节: 变量Str名字是一个指针,指向位于堆内存的字符序列,字符序列起 ...

  2. .dat文件写入byte类型数组_文件字节流、文件字符流、缓冲字节流、缓冲字符流字节数组流、数据流、转换流、对象流...

    一.实操名称: 描述如下流的基本作用:文件字节流.文件字符流.缓冲字节流.缓冲字符流字节数组流.数据流.转换流.对象流二.描述1.文件字节流:包括:FileInputStream,FileOutput ...

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

    java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形 ...

  4. C#中字节数组与字符串的来回转换

    C#中字节数组与字符串的来回转换会遇到一个奇怪的问题.这个问题是在做网络传送文件时遇到的. 问题如下: 就是把件流形成的字节数组转成字符串发送,对端接收到过后把字符串还原成字节数组然后形成文件流. 这 ...

  5. java整型转换为数组_基于java中byte数组与int类型的转换(两种方法)

    java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形 ...

  6. Java学习(4)—— 布尔类型、基本数据类型转换、基本数据类型和String类型的转换

    布尔类型 也叫Boolean类型,boolean只允许取true和false. boolean占一个字节. 适用于逻辑运算,流程控制语句. 有默认类型,是false.但是应该声明为成员变量或是静态变量 ...

  7. Solidify实现一个智能合约9(数组和string之间的转换关系)

    固定大小字节数组之间的转换 固定大小字节数组,我们可以通过bytes1~32来进行声明,固定大小字节数组的长度不可变,内容不可修改. pragma solidity ^0.4.4; contract ...

  8. byte数组与int类型互相转换的几种方式

    查看原文:http://www.ibloger.net/article/147.html Java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中 ...

  9. vb 使用Array.ConvertAll将object类型数组转为string类型数组

    vb 使用Array.ConvertAll将object类型数组转为string类型数组有两种方法 1.    方法1 1 Dim int_array() As Object = {1, 2, 3} ...

最新文章

  1. jQuery中常用的函数方法总结
  2. 自然语言处理NLP-100例 | 第三篇:骚扰短信识别 MultinomialNB实现(内附源码)
  3. 解题报告 『[NOI2014]起床困难综合症』
  4. Redis bitmap使用场景示例
  5. OpenCV Hit or Miss 击中或没打中的实例(附完整代码)
  6. DataGridView常见用法和FAQ汇总
  7. 第5月第8天 jsonmodel
  8. CentOs MySQL数据目录迁移
  9. SAP UI5加载时的library-preload.json文件
  10. Delphi中TEdgeBrowser控件初探
  11. VirtualLab基础实验教程-6.闪耀光栅
  12. python 处理数据小工具_用Python这个小工具,一次性把论文作图与数据处理全部搞定!...
  13. 计算机软件硬件结构造图,个人计算机的存储器系统 说说内核与计算机硬件结构(3)...
  14. 【Unity VR开发基础】Player视角设置调整与地面的相对高度
  15. 【计算机网络】2.1 应用层协议原理
  16. 使用记账软件记录生活收支明细,如何防止收支不被他人修改
  17. oracle driver class not found,错误 JDBC Driver class not found: oracle.jdbc.dirver.OracleDriver
  18. win10查看设备序列号、硬盘序列号、mac地址
  19. Win10 笔记本显示器颜色太艳,如何将电脑屏幕颜色调淡
  20. 《卓有成效的管理者》——学习心得(六)

热门文章

  1. suricata smtp协议解析源码注释一
  2. jquery入门介绍
  3. Mysql引擎的知识
  4. MAC查看SVN版本日志
  5. 直播视频网站源码,SharedPreference简便写法
  6. 【java笔记】java中的常用容器
  7. 1256 字符串复制
  8. 北京大学计算机学院复试名单2021,北京大学研究生招生简章2021(北京大学研究生复试名单)...
  9. 《C++ Primer》第5章 5.2节习题答案
  10. Qt源码分析之信号和槽机制