Delphi的字符串、PChar和字符数组之间的转换
参考:http://my.oschina.net/kavensu/blog/193719
以下的各种方法都是我在Delphi 6的环境下测试成功的,可能根据你的开发环境、不同的上下文语境……有一些可能会出现问题,以自己在使用的时候进行具体的测试为准
Char数组和String的相互转换的另一种方法和注意事项请看下一篇博客
同时建议结合以下的博客一起理解:
《Delphi字符串的基本操作》和《Delphi中的各种字符串、String、PChar、Char数组》
0.前提条件
var
s: String;
p: PChar;
a: Array[0..20] of char;
1.字符串 ---> PChar
P:= PChar(S);
2.PChar ---> 字符串
s:= p;
或者
s:= string(p);
上面的两种方式的效果一样,都是将p 指向的内存中的字符串拷贝到s 里面,s 和 p 各自有自己的内存空间,并不是将s 和 p指向同一个内存,所以对s 的修改不会影响p ,对p 的修改也不会影响s
3.PChar --->字符数组
StrCopy(@a, p);
StrCopy的原型如下
function StrCopy(Dest: PChar; const Source: PChar): PChar;
StrCopy的说明如下(通过查看Delphi的API参考文档获得这些信息)
Use StrCopy to copy a null-terminated string(使用StrCopy去拷贝一个null结尾的字符串)。
StrCopy does not perform any length checking. The destination buffer must have room for at least StrLen(Source)+1 characters.(StrCopy不进行任何长度的检查,目标的buffer的长度至少是 StrLen(Source)+1)
For length checking, use the StrLCopy function.(要想进行长度检查,请使用StrLCopy函数)
4.字符数组 ---> PChar
PChar(@a);
5.字符串 ---> 字符数组
StrCopy(@a, PChar(s));
这种方法是通过 PChar作为中转的
6.字符数组 ---> 字符串
s:= PChar(@a);
这种方法是通过 PChar作为中转
或者
s:= string(a);
这种方式类似于 将PChar转换为string
第二种方法是将数组a 指向的内存中的字符拷贝到s 里面,s 和 a 各自有自己的内存空间,并不是将s 和 a指向同一个内存,所以对s 的修改不会影响a ,对a 的修改也不会影响s
或者还可以使用下面的方法
s:= a;
但是第二、三种方法中涉及到的字符数组中是不是有 #0、初始化等问题,还需要继续探究,参考 下一篇博客
Delphi的字符串、PChar和字符数组之间的转换的更多相关文章
- Delphi字符串、PChar与字符数组之间的转换
来自:http://my.oschina.net/kavensu/blog/193719 ------------------------------------------------------- ...
- Delphi字符串与字符数组之间的转换(初始化的重要性)
紧接着上篇博客讲解的内容: 将Char型数组转换为string类型还有下面的这种方法 但是我在测试的时候遇到了一些问题,并在下面进行了解释和总结 先说出我的总结 其实我们在学习编程的时候(比如我之前学 ...
- QString和char字符数组之间的转换(QTextCodec.toUnicode方法,特别注意\0的问题)
How can I convert a QString to char* and vice versa ?(trolltech) Answer:In order to convert a QStrin ...
- C# 16进制与字符串、字节数组之间的转换(转)
1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串 //十进制转二进制 Console.WriteLine("十进制166的二进制表示: "+Convert.ToSt ...
- C# 16进制与字符串、字节数组之间的转换 (转载)
1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串 //十进制转二进制 Console.WriteLine(, )); //十进制转八进制 Console.WriteLine(, )); / ...
- C#串口通讯,16进制与字符串、字节数组之间的转换。
1.将十进制数的字符串转化成十六进制数的字符串 //十进制转二进制Console.WriteLine("十进制166的二进制表示: "+Convert.ToString(166, ...
- C# 16进制与字符串、字节数组之间的转换
1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串//十进制转二进制 Console.WriteLine("十进制166的二进制表示: "+Convert.ToStrin ...
- C# 16进制与字符串、字节数组之间的转换(串口通讯中)
1.c#中如何将十进制数的字符串转化成十六进制数的字符串//十进制转二进制 Console.WriteLine("十进制166的二进制表示: "+Convert.ToString( ...
- C++字符串指针与字符数组的区别
今天发现这样一个问题 #include <iostream> using namespace std; int main() { ]; strcpy_s(ch1,");//编译通 ...
随机推荐
- git 教程(5)--工作区和暂存区
Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 工作区(working directory) 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区: 版本库 ( ...
- 寻找下一款Prisma APP:深度学习在图像处理中的应用探讨(阅读小结)
原文链接:https://yq.aliyun.com/articles/61941?spm=5176.100239.bloglist.64.UPL8ec 某会议中的一篇演讲,主要讲述深度学习在图像领域 ...
- mysql根据汉字拼音排序查询
例如现在有一张数据表label,字段为id.name,此表的字符集设置为gb2312,以gb2312_chinese_ci整理. 设置InnoDB引擎的字符集也为简体中文,且整理为gb2312_chi ...
- 将 JAR 转为 EXE – EXE4J 的使用教程(第一期)(转载)
http://www.iteknical.com/convert-jar-to-exe-phase-i-exe4j-tutorial/
- JavaScript Coding 模式荟萃
1.自运行的匿名函数 <script type="text/javascript" src="./js/jquery-1.7.2.js"></ ...
- JavaScript——特殊点总结
首先,== equality 等同,=== identity 恒等. ==, 两边值类型不同的时候,要先进行类型转换,再比较. ===,不做类型转换,类型不同的一定不等. 下面分别说明: 先说 === ...
- JavaScript Window对象属性
window 代表浏览器中一个打开的窗口. Window的属性 属性 描述 closed 获取引用窗口是否已关闭. defaultStatus 设置或获取要在窗口底部的状态栏上显示的缺省信息. dia ...
- 【leetcode】Recover Binary Search Tree
Recover Binary Search Tree Two elements of a binary search tree (BST) are swapped by mistake. Recove ...
- 【leetcode】Multiply Strings
Multiply Strings Given two numbers represented as strings, return multiplication of the numbers as a ...
- poj 1326
http://poj.org/problem?id=1326 一个模拟的水题 题意就是要你算飞行的英里数. F代表头等舱,为实际飞行的英里数的2倍. B为商务舱,为实际飞行的英里数的1.5倍. Y为经 ...