还是本着上篇文章的原则,只不过在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[]-buf[]的数组转为string[]
一、字节数组转string
.
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个功能,.对Short string类型进行设置长度(专门针对其第1位进行设置).对动态数组进行设置 .
如果想把buf内容赋给string(string与string[]不一样,string是一个动态数组,还没有分配空间,而string[]已经预分配了空间,只不过str[]处没赋初值,这时如果用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;

字节数组与结构体的转换 还是一个原则,在此不再详述!

type
PData=^TData;
TData = packed record
a: Integer;
b: Word;
end;
var
bs: array[..] of Byte;
data: PData;
begin
FillChar(bs, Length(bs), );
bs[] := $;
bs[] := $; data := @bs[];//把字节数组的首址传给结构体
ShowMessage(IntToStr(data^.a)); //系统帮我们捆绑读取 end;

字节数组与String类型的转换的更多相关文章

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

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

  2. Java中二进制、十进制、十六进制及ASCII码与String及字节数组与十六进制之间的转换

    public class DigitalTrans { /** * 数字字符串转ASCII码字符串 * * @param String * 字符串 * @return ASCII字符串 */ publ ...

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

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

  4. golang数据基本数据类型和string类型的转换

    基本类型之间的转换 golang在不同类型的变量之间赋值时需要显式转换,也就是说golang中数据类型不能自动转换. 表达式T(v)将值v转换为类型T 1.数据类型的转换可以是从范围小——>范围 ...

  5. C#中字符数组,字节数组和string之间的转化

    转自:http://blog.csdn.net/wangxiaoqin00007/article/details/17675419 NDC(NetworkDiskClient)的界面和后台程序之间用S ...

  6. C++入门经典-例6.22-字符串与数组,string类型的数组

    1:数组中存储的数据也可以是string类型的.代码如下: // 6.22.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include ...

  7. 基本数据类型和string类型的转换

    基本数据类型转string类型: 方式1:fmt.Sprintf("%参数", 表达式) [个人习惯这个,灵活] 函数的介绍: func Sprintf func Sprintf( ...

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

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

  9. 【语言基础】c++ 基本数据类型与字节数组(string,char [] )之间的转化方法

    有时候我们需要将基本数据类型转化为字节,以便写入文件,然后必要时还需要将这些字节读出来.有人说,为啥不把数字直接存进文件呢?比如:100,000,000,我们直接存数字明文到文件那就是9个字符(cha ...

随机推荐

  1. C/C++内存泄漏检测 —— memleax

    memleax是个开源项目,原理是通过注入hook目标进程的malloc(new也是用的malloc)内存分配函数,在指定时间未释放则认为内存泄漏.优点是不需要重启,attach到目标进程. gith ...

  2. 极大极小搜索思想+(α/β)减枝 【转自-----https://blog.csdn.net/hzk_cpp/article/details/79275772】

    极大极小搜索,即minimax搜索算法,专门用来做博弈论的问题的暴力. 多被称为对抗搜索算法. 这个搜索算法的基本思想就是分两层,一层是先手,记为a,还有一层是后手,记为b. 这个搜索是认为这a与b的 ...

  3. Contest1036 - 2017西安电子科技大学程序设计新生赛网络预选赛

    一名大三older 希望能帮助大一萌新...加油 xiandianer!!!!; xdoj 1260 (B) 水题 用了一下STL (好长啊...) #include<iostream> ...

  4. Spring mvc下载文件java代码

    /** * 下载模板文件 * @author cq */ @RequestMapping("/downloadExcel.do") public ResponseEntity< ...

  5. a标签的功能

    最常见的a标签是用来做跳转链接,实际上a标签还有其他的功能,具体如下: <a href="http://www.cnblogs.com/wangzhenyu666/"> ...

  6. array的方法 没记住的

    reserve() 是倒叙: sort() 拍序,按字符编码排序,可以传一个参数 reduce() 实例:判断一个数组里参数的个数 var arr = ["apple"," ...

  7. HPU第四次积分赛-K :方框(水题,打印图形)

    方框 描述 用'*'打印出一个nxn的字符图形(1<=n<=100). 输入 多组输入.每行输入一个n,输入EOF结束文件. 输出 输出一个满足题意的图形. 输入样例 1  1 2 5 6 ...

  8. PTA——统计区间内质数

    PTA 7-33 统计素数并求和 #include<stdio.h> #include<math.h> int prime(int p); int main() { int m ...

  9. 2018.4.3 配置AD服务器步骤

    net ads命令表 配置AD服务器步骤:1. 安装rpm依赖包yum -y install pam_krb5* krb5-libs* krb5-workstation* krb5-devel* kr ...

  10. 流程控制之if

    流程控制 假如把写程序比做走路,那我们到现在为止,一直走的都是直路,还没遇到过分叉口,想象现实中,你遇到了分叉口,然后你决定往哪拐必然是有所动机的.你要判断那条岔路是你真正要走的路,如果我们想让程序也 ...