日期:2014-05-18  浏览次数:20800 次

字符串转字节问题
遇到问题了,先上代码

C# code

char a = (char)(0x1C);
char b = (char)(0x4B);
char c = (char)(0xAF);
String s = a.ToString() + b.ToString() + c.ToString();
byte[] mybyte = System.Text.Encoding.Default.GetBytes(s);



mybyte期望得到的结果是 1C 4B AF

但是实际上得到的结果是 1C 4B A1 A5

那位高手说一下原因

------解决方案--------------------
char c = (char)(0xAF);这个已经超出了char的范围,至于GetBytes是如何工作的,可以用reflector去看看.net的源码
------解决方案--------------------
转字节和编码方式有关,System.Text.Encoding.Default是什么编码方式不太清楚,可能是utf7之类的,

你的预期是asscii码,应该这样转:System.Text.Encoding.ASCII.GetBytes(s);

不过很奇怪,msdn上说System.Text.Encoding.Default就是System.Text.Encoding.ASCII,你可以试试,
------解决方案--------------------



分别用
System.Text.Encoding.ASCII.GetBytes(s)
System.Text.Encoding.Default.GetBytes(s)
System.Text.Encoding.Unicode.GetBytes(s)
测试,得到
3
4
6

关注了下 System.Text.Encoding.Default 是
System.Text.DBCSCodePageEncoding

得到
http://hi.baidu.com/oudioppa/blog/item/7a5cbcefc8f8f71efcfa3ce1.html
http://blog.csdn.net/jgood/article/details/4540466

供你参考