【C#】byte[]数组中有值大于127时与string之间的相互转化

接触到byte[]数组是在做对象序列化的时候,在将byte[]数组转化到string时,尝试过多种方法,比较靠谱的是这两种

string s1 = System.Text.Encoding.ASCII.GetString(b);
string s2 = System.Text.Encoding.Default.GetString(b);

byte[] b1 = System.Text.Encoding.ASCII.GetBytes(s1);
byte[] b2 = System.Text.Encoding.Default.GetBytes(s2);

缺省的编码方式以及ASCⅡ码的编码方式,Unicode和UTF-8之类的就不用尝试了,后面会给例子。

在你的byte[]数组中有大于127的时候,可能上面两种方法也不好使了,大于127的值通通转化成‘?’,再转换成byte就是‘?’的ASCⅡ码值63(在写这篇文章的时候再次测试了上面的代码,意外发现了缺省的方式没有出错,有点汗颜= =!!,后面会讲一种我自己写的方法)。先贴一段测试代码,包含我写的解决方法。

static void Main(string[] args)
 {
      byte[] b = { 255, 128,254,233,111 };
      string s1 = System.Text.Encoding.ASCII.GetString(b);
      string s2 = System.Text.Encoding.Default.GetString(b);
      string s3 = System.Text.Encoding.Unicode.GetString(b);
      string s4 = System.Text.Encoding.UTF8.GetString(b);
      byte[] b1 = System.Text.Encoding.ASCII.GetBytes(s1);
      byte[] b2 = System.Text.Encoding.Default.GetBytes(s2);
      byte[] b3 = System.Text.Encoding.Unicode.GetBytes(s3);
      byte[] b4 = System.Text.Encoding.UTF8.GetBytes(s4);
      string s5 = getString(b);
      byte[] b5 = getBytes(s5);
      bool bo1 = s2.Equals(s5);
      bool bo2 = s2.Equals(System.Text.Encoding.Default.GetString(b2));
      bool bo3 = s3.Equals(System.Text.Encoding.Unicode.GetString(b3));
}

static byte[] getBytes(string s)     //string转byte[]
 {
      byte[] b = new byte[s.Length];
      for (int i = 0; i < s.Length; i++)
      {
          b[i] = Convert.ToByte(s[i]);
      }
     return b;
}

static string getString(byte[] b)    // byte[]转string
{
     string s = "";
     for (int i = 0; i < b.Length; i++)
     s += ((char)b[i]).ToString();
     return s;
}
实现思路很简单,其实也只是一种尝试,将byte[]数组每一个元素转换成String连接在一起,将string每一个字符转化成byte。
测试结果:

b1 =  63 ,63,63,63,111

b2 =  255, 128, 254, 233, 111 

b3 =  255, 128, 254, 233, 253,255

b4 =  239,191,189,239,191,189,239,191,189,239,191,189,111

b5 =  255, 128, 254, 233, 111 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值