您的位置:首页 > 职场人生

NET面试题:如何在String和Byte[]对象之间进行转换

2011-03-01 08:21 225 查看
NET面试题:如何在String和Byte[]对象之间进行转换

在数据的处理过程中,不可避免地将经常遇到字符串和字节数组转换的需求。这一类的面试题旨在考查应聘者对于字符、编码等基本概念的理解程度。

所涉及的知识点

· 比特、字节和编码的基本概念

· 在字符串和字节数组间进行转换

分析问题

字符串和字节数组之间的转换,事实上代表了现实世界信息和数字世界信息之间的转换,要理解其中的机制,需要先了解一下几个基本概念。

1.比特

比特(bit)是指一个位,它可以说是计算机内物理保存的最基本单元。现在的计算机体系采用二进制逻辑,即一个基本单元可以保存两种数值:0和1。这是因为0、1机制可以用多种物理系统来代表,例如高电平和低电平、二极管的导通和关闭、磁场的正极和负极等。总之,一个比特就是一个二进制位。

2.字节

一个字节(byte),在C#中是由8个比特来构成的。它的值可以由一个0~255的整数表示,但是在C#中不允许隐式地把一个整数变量赋值给一个字节变量,下面的代码将导致编译的错误:

int i=10;

int j=0;

byte b=i-j;

3.编码

编码,可说是数字信息和现实信息的转换机制。一种编码通常就定义了一种字符集合转换的原则,常用的编码方式包括UTF8、GB2312、UTF7、Unicode等,在UTF-8中,字符采用1~6个8比特字节的序列进行编码。仅仅8比特字节的序列中,字节的高位为0,其他的7位用于字符值编码。n(n>1)个8比特字节的一个序列中,初始的8比特字节中高n位为1,接着一位为0,此字节余下的位包含被编码字符值的位。接着的所有8比特字节的最高位为1,接着下一位为0,余下每个字节6位包含被编码字符的位。

图4.1展示了比特、字节、编码和字符串的关系。

图4.1 比特、字节、编码的图示

根据定义,字节数组和字符串的转换必然涉及使用某种编码方法。不同的编码方式将导致不同的转换结果。在C#中,使用System.Text.Encoding来管理常用的编码。代码4-3展示了如何在字节数组和字符串之间进行转换。

代码4-3 字符串和字节数组转换:StringByte.cs

namespace NET.MST. Fourth.StringByte

{

class StringByte

{

static void Main(string[] args)

{

String s = "我是字符串,I am string";

//字节数组转换到字符串

//UTF8编码

Byte[] utf8 = StringToByte(s, Encoding.UTF8);

//GB2312编码

Byte[] gb2312 = StringToByte(s, Encoding.GetEncoding("GB2312"));

//UNICODE编码

Byte[] unicode = StringToByte(s, Encoding.Unicode);

Console.WriteLine(utf8.Length);

Console.WriteLine(gb2312.Length);

Console.WriteLine(unicode.Length);

//转换回字符串

Console.WriteLine(ByteToString(utf8, Encoding.UTF8));

Console.WriteLine(ByteToString(gb2312, Encoding.GetEncoding("GB2312")));

Console.WriteLine(ByteToString(unicode, Encoding.Unicode));

Console.Read();

}

//把字符串转换为字节数组

static Byte[] StringToByte(String s, Encoding encoding)

{

return encoding.GetBytes(s);

}

//把字节数组转换为字符串

static String ByteToString(Byte[] b, Encoding encoding)

{

return encoding.GetString(b);

}

}

}

程序展示了如何利用三种常见的编码方式把字符串转换成字节数组,接着再转换回字符串。程序中间检查了字节数组的长度,读者可以看到利用不同的编码方式产生的字节数组是完全不同的。对于具体的编码定义,有兴趣的读者可以参考ISO和RFC的标准文档。下面是程序的执行结果:

27

22

34

我是字符串,I am string

我是字符串,I am string

我是字符串,I am string

答案

字符串和字节数组的转换依赖于编码方式的使用,不同的编码标准将使用不同的算法进行。System.Text.Encoding类型提供了大部分常见的编码算法支持,用以进行字符串和字节数组之间的转换

更多.net面试题,.net电子书,.net教学视频请参考"51CTO提醒您,请勿滥发广告!"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: