我首先将byte[]转换为string,然后又把这个string转成byte[],原来byte[]长度是42,转换回来之后变成了41, 数据怎么少了一位?

解决方案 »

  1.   

    开始那个 byte[] 怎么来的?
    看看开始几个字节是否有区别可能 BOM 的缘故
      

  2.   

    byte[] bytes = new byte[] { 2, 1, 3, 0, 0, 1, 0, 0, 218, 0, 42, 0, 0, 0, 0, 0, 0, 0, 65, 76, 65, 82, 77, 32, 72, 101, 97, 114, 116, 66, 101, 97, 116, 58, 57, 58, 53, 56, 58, 48, 52 };
                Console.WriteLine("bytes数据长度:" + bytes.Length);
                string strData = Encoding.Default.GetString(bytes);
                byte[] bufData = Encoding.Default.GetBytes(strData);
                Console.WriteLine("bufData数据长度:" + bufData.Length);
    代码就是这样
      

  3.   

    你理解 Default 是什么意思吗?通常在.net是unicode。那么很简单,在string传递、计算过程中,不符合unicode规则的内容被过滤掉了,剩下的是正常的unicode内容。你用这种方式“转换”,没有足够的根据!
      

  4.   

    那不是还剩下10头猪吗?应为我的服务器是C语言开发的,传过来我这边的数据要转换成16进制的形式接收,default不是转换为16进制吗?
      

  5.   


    转换成16进制,你用错了方法了,试下这个
    string strData = BitConverter.ToString(bytes);
      

  6.   

    Encoding.Default.GetString
    是把Ansi编码的byte数组,转为相应的字符串
    而你的bytes中存放的不是Ansi编码的byte数组
      

  7.   

    BitConverter.ToString得到的十六进制字符串是以'-'隔开的,如果你不要'-',那么string strData = BitConverter.ToString(bytes).Replace("-","");