有这样一个字节数组:
byte[] b={104,1,2,3,4,5,6,104,81,0,10,6,10,17,10,0,6,10,17,10,0,150,22};
转成字符串:
string s=System.Text.Encoding.Default.GetString(b);
//s的内容为:hhQ\0\n\n\n\0\n\n\0?
//其s的长度为22,原字节数组长度为23,少了一个。
//再从s转成字节数组
byte[] bs=System.Text.Encoding.GetEncoding("GB2312").GetBytes(s);
//bs的值变成了:{104,1,2,3,4,5,6,104,81,0,10,6,10,17,10,0,6,10,17,10,0,63}
//与原来的b不相同了
诚:向大家请教:如何把一个字节数组转成字符串,再从字符串转成字节数组
且请告诉我为什么会这样原因,谢谢?

解决方案 »

  1.   

    字节数组转成字符串:
    System.Text.Encoding.Default.GetString();
    字符串转成字节数组:
    System.Text.Encoding.Default.GetBytes();
      

  2.   

    字符串是多1个,因为最后是0嘛。而你用什么方式变成的string,就必须用方式变回来。就像楼上说的
      

  3.   

    反过来字符串转成字节数组,再字节数组转回字符串,是没有问题的,只要使用相同的Encoding
      

  4.   

    更正:从字符串转成字节数组是用的byte[] bs=System.Text.Encoding.Default.GetBytes(s);
    只是发帖子时还在调试,不小心帖错了:)
    其实结果都是一样的-->不能正确从字符串返回到字符数组。
    To:liangxf0022(小新) 是字符串少一位,而不是字符串多一位。To:viena(维也纳nn) 我的目是向串口发送数据,因使用的控件限制,发送的数据必须是字符串格式(不能更换串口控件),但我现在就有这样的一个字节数组,请问,有怎样才能转换成字符串发送出去呢?谢谢
      

  5.   

    To: laladeng()  你说的对,那我应该怎么办呢 ):
      

  6.   

    byte[] b={104,1,2,3,4,5,6,104,81,0,10,6,10,17,10,0,6,10,17,10,0,150,22};
    string str = BitConverter.ToString(b);
      

  7.   

    68-01-02-03-04-05-06-68-51-00-0A-06-0A-11-0A-00-06-0A-11-0A-00-96-16
      

  8.   

    //字符串转回字节数组
    string str = "68-01-02-03-04-05-06-68-51-00-0A-06-0A-11-0A-00-06-0A-11-0A-00-96-16";
    string[] astr = str.Split('-');
    byte[] abt = new byte[astr.Length];
    for(int i=0;i<abt.Length;i++)
    {
        abt[i] = Convert.ToByte(astr[i],16);
    }
      

  9.   

    To: viena(维也纳nn):这种方法我试过,但串口接收数据是按ASSII码接收并显示的。
    如:68,接收到后,为:36 38
    6的ASCII-->36
    8的ASCII-->38
    本来0X68作为一个字节发送,但接收到后,把0x68当成了“68”,然后按位转成ASCII,成了36 38了 ):我该怎么办
      

  10.   

    晕,转回去就好了
    string s = "";
    s += (char)36;
    s += (char)38;//s="68"