5. 字符串和字符数组之间的转换

字符串类 System.String 提供了一个 void ToCharArray() 方法,该方法可以实现字符串到字符数组的转换。如下例:

 TestStringChars() {str = ;
[] chars = str.ToCharArray();
.textBox1.Text = ;
.textBox1.AppendText( + str.Length + );
.textBox1.AppendText(" + chars.Length + );
.textBox1.AppendText( + chars[2] + );
}

例中以对转换转换到的字符数组长度和它的一个元素进行了测试,结果如下:

Length of "mytest" is 6

Length of char array is 6

char[2] = t

可以看出,结果完全正确,这说明转换成功。那么反过来,要把字符数组转换成字符串又该如何呢?

我们可以使用 System.String 类的构造函数来解决这个问题。System.String 类有两个构造函数是通过字符数组来构造的,即 String(char[]) 和 String[char[], int, int)。后者之所以多两个参数,是因为可以指定用字符数组中的哪一部分来构造字符串。而前者则是用字符数组的全部元素来构造字符串。我们以前者为例,在 TestStringChars() 函数中输入如下语句:

char[] tcs = {'t', 'e', 's', 't', ' ', 'm', 'e'};

string tstr = new String(tcs);

this.textBox1.AppendText("tstr = \"" + tstr + "\"\n");

运行结果输入 tstr = "test me",测试说明转换成功。

实际上,我们在很多时候需要把字符串转换成字符数组只是为了得到该字符串中的某个字符。如果只是为了这个目的,那大可不必兴师动众的去进行转换,我们只需要使用 System.String 的 [] 运算符就可以达到目的。请看下例,再在 TestStringChars() 函数中加入如如下语名:

char ch = tstr[3];

this.textBox1.AppendText("\"" + tstr + "\"[3] = " + ch.ToString());

正确的输出是 "test me"[3] = t,经测试,输出正确。

6. 字符串和字节数组之间的转换

如果还想从 System.String 类中找到方法进行字符串和字节数组之间的转换,恐怕你会失望了。为了进行这样的转换,我们不得不借助另一个类:System.Text.Encoding。该类提供了 bye[] GetBytes(string) 方法将字符串转换成字节数组,还提供了 string GetString(byte[]) 方法将字节数组转换成字符串。

System.Text.Encoding 类似乎没有可用的构造函数,但我们可以找到几个默认的 Encoding,即 Encoding.Default(获取系统的当前 ANSI 代码页的编码)、Encoding.ASCII(获取 7 位 ASCII 字符集的编码)、Encoding.Unicode(获取采用 Little-Endian 字节顺序的 Unicode 格式的编码)、Encoding.UTF7(获取 UTF-7 格式的编码)、Encoding.UTF8(获取 UTF-8 格式的编码) 等。这里主要说说 Encoding.Default 和 Encoding.Unicode 用于转换的区别。

在字符串转换到字节数组的过程中,Encoding.Default 会将每个单字节字符,如半角英文,转换成 1 个字节,而把每个双字节字符,如汉字,转换成 2 个字节。而 Encoding.Unicode 则会将它们都转换成两个字节。我们可以通过下列简单的了解一下转换的方法,以及使用 Encoding.Default 和 Encodeing.Unicode 的区别:

 TestStringBytes() {s = ;
[] b1 = System.Text.Encoding.Default.GetBytes(s);
[] b2 = System.Text.Encoding.Unicode.GetBytes(s);t1 = , t2 = ;( b  b1) {
t1 += b.ToString() + ;
}( b  b2) {
t2 += b.ToString() + ;
}
.textBox1.Text = ;
.textBox1.AppendText( + b1.Length + );
.textBox1.AppendText(t1 + );
.textBox1.AppendText( + b2.Length + );
.textBox1.AppendText(t2 + );
}

运行结果如下,不说详述,相信大家已经明白了。

b1.Length = 6

67 35 211 239 209 212

b2.Length = 8

67 0 35 0 237 139 0 138

将字节数组转换成字符串,使用 Encoding 类的 string GetString(byte[]) 或 string GetString(byte[], int, int) 方法,具体使用何种 Encoding 还是由编码决定。在 TestStringBytes() 函数中添加如下语句作为实例:

byte[] bs = {97, 98, 99, 100, 101, 102};

string ss = System.Text.Encoding.ASCII.GetString(bs);

this.textBox1.AppendText("The string is: " + ss + "\n");

运行结果为:The string is: abcdef

转载于:https://www.cnblogs.com/liuyes/articles/738316.html

C# .Net中的类型转换(3)相关推荐

  1. C#.NET 中的类型转换

    前些天,碰到了数据类型转换与格式化问题,在网上查找了一下,有人已经把它写了出来,粘贴如下,共大家分享: C#.NET 中的类型转换 C# 出来也有些日子了,最近由于编程的需要,对 C# 的类型转换做了 ...

  2. HQL语句中数据类型转换,及hibernate中createQuery执行hql报错

    一.HQL语句中数据类型转换: 我们需要从数据库中取出序号最大的记录,想到的方法就是使用order by子句进行排序(desc倒序),然后取出第一个对象,可是当初设计数据库时(我们是在原来的数据库的基 ...

  3. typecast java_Java中的类型转换

    类型转换Typecasting是一个用与Java类似的所有语言引入的术语. 当我们将原始数据类型分配给另一个数据类型时. 在Java中,类型转换具有两种类型:扩大类型转换 缩小类型转换 我们将通过示例 ...

  4. c++与Delphi中的类型转换

    delphi中的类型转换是,将要转换的对象用括号括起来,而c++中是将要转换成的类型用括号括起来.各举例如下: Delphi:TComponent(T1) C++ (TComponent)T1

  5. java中的类型转换

    今天复习了一下java的基础,重新回顾一下java中的类型转换. 一.自动类型转换 java中的数值类型都能进行自动类型的转换,表示范围小的能自动转化为表示范围大的. 总的来说如下图: 还有一种自动转 ...

  6. 理解C#语言中的类型转换----初学者的理解,请大神指教

    一下都是在视频教学中学到后的理解,如果说错了请大神指教 C#语言中的类型转换,就是将某个数据要转换成另一个类型的数据. c#语言中的数据类型主要有: char类型(字符类型): string类型(字符 ...

  7. c++中的类型转换--reinterpret_cast

    原文链接:  浅析c++中的类型转换--reinterpret_cast 转换 reinterpret_cast作用为: 允许将任何指针转换为任何其他指针类型. 也允许将任何整数类型转换为任何指针类型 ...

  8. c语言运算符类型转换,C语言中强制类型转换运算符的独特作用

    C语言中强制类型转换运算符的独特作用 在C语言中有一个强制类型转换运算符,它为C语言中的数据类型转换带来 (本文共2页) 阅读全文>> 在进行C++类的设计时,我们常常需要为类对象设计运算 ...

  9. 【C语言进阶深度学习记录】四 C语言中的类型转换

    今天学习C语言中的类型转换,包括隐式类型转换和显示类型转换 文章目录 1 C语言中的数据类型转换 1.1 强制类型转换 1.11 强制类型转换代码分析 1.2 隐式类型转换 1.21 隐式类型转换代码 ...

  10. C#中的类型转换大总结

    使用C#一个最常见的问题便是各种类型间的转换. 我们知道,C#中的类型分为值类型和引用类型两大类.但是,有关它们间各自转换的细节描述在网上很少得到详细的回答.现在,我结合搜索到的部分资料整理如下: 1 ...

最新文章

  1. linux修改arena大小,教大家Resolume Arena怎么设置大屏幕的方法
  2. sysbench mysql测试_使用sysbench对MySQL进行测试
  3. c# 大数据量比较时-方案
  4. 在数组中找到第 k 小的数
  5. C++函数模板(一)
  6. JavaScript常用函数总结
  7. 使用open flash chart的BarGlass时遇到的问题
  8. html辅助方法以及常用属性值,工作总结 @Html 辅助方法 为 生成的 标签设置元素属性 htmlAttributes 一个对象,其中包含要为该元素设置的 HTML 特性。...
  9. Nacos(一)之简介
  10. Jupyter Notebook使用说明
  11. angularjs笔记,基本指令,字符串反转,过滤器
  12. 使用elasticSearch实现以图搜图
  13. Word替换重复的内容
  14. 计算机打字在哪点,电脑打字在哪里打开
  15. 压缩包文件如何设置加密、删除加密?
  16. 喧喧发布 2.5.1 版本,支持移动版和桌面端同时登录
  17. 关于lock_guard
  18. 让企业订单交期满足率提升3.5倍,新一代APS(高级生产计划与排程系统)是什么样的?
  19. Android 内存优化- ANR 详解
  20. Python操作wps和et(WPS版的DOC和EXCEL)

热门文章

  1. 多维数组做参数,内存可以看做是线性的
  2. 指针传递和strcpy的实现
  3. 后台图片验证码功能是什么实现的
  4. python3第八天(面向对象)
  5. jQuery的Deferred
  6. android 网络连接判断
  7. 数据是怎么在网上安全传输的
  8. VMware view client for ipad 测试
  9. python词频统计西游记实验报告_Python文本统计功能之西游记用字统计操作示例
  10. Spring boot(4) web开发(2) 请求处理、响应处理、模板引擎