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进制的字符。