c#中char、string转换为十六进制byte的浅析

问题引出: string转换为byte(十六进制)

 1  static void Main(string[] args)
 2 {
 3        string str = "05143124";
 4        byte[] b = Encoding.Default.GetBytes(str);
 5        for (int i = 0; i < b.Length; i++)
 6        {
 7             Console.WriteLine(b[i]);
 8        }
 9        Console.ReadKey();
10 }

运行结果:

问题来了,为什么转化的结果是这个呢?48、53...是表示十进制还是十六进制呢?为什么不是0x00,0x05....或者是其他的....于是在网上搜查......

ASCII引出,在计算机,所有的数据在存储和运算都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)、以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。

通过表可以看出,字符串转化为字节数组,是将每个字符转化为对应的ASCII码,在C#中(VS 2013)打印字符串都是打印的十进制,若想打印出十六进制的需对代码作微小变得。

 1 static void Main(string[] args)
 2 {
 3        string str = "05143124";
 4        byte[] b = Encoding.Default.GetBytes(str);
 5 
 6        for (int i = 0; i < b.Length; i++)
 7        {
 8          Console.WriteLine(b[i].ToString("x2"));
 9       }
10       Console.ReadKey();
11 }

运行结果:

ToString("x2") 为C#中的字符串格式控制符

x表示     十六进制 
2表示     每次都是两位数

这个结果输出的就是16进制的字符。

 

posted @ 2017-04-27 15:12  eager_cao  阅读(18031)  评论(0编辑  收藏  举报