byte[] byt=new byte[]{0x7e,0xff,0x7e,0xaa,0x14,0x00,0x00,0x00,0x62};
现有一byte数组如上。因一软件的需要,我需要先把该数组转换为一个字符串,然后再将该字符串转换为byte数组,使用如下方法:string str=Encoding.XXX.GetString(byt);//先转换为字符串
byte[] byt1=Encoding.XXX.GetBytes(str);//在另外某一个地方再转换为byte数组(XXX表示字符编码集)
现在就是发现一个问题,转换过程中发生了“变异”:byt1数组中的内容和byt数组中的内容不相同,XXX字符编码集使用了Unicode、UTF7、UTF8、UTF32、ASCII、DefaultXXX等,都测试了一遍,没有一个原封不动地转换回去了的!!请问各位朋友,这是怎么回事捏???要怎么处理才能让byt1和byt两数组中的内容一模一样?????
谢谢!

解决方案 »

  1.   

                    // byte[] -> string
                    byte[] byt = new byte[] { 0x7e, 0xff, 0x7e, 0xaa, 0x14, 0x00, 0x00, 0x00, 0x62 };
                    string str = BitConverter.ToString(byt);                // string -> byte[]
                    string[] arr = str.Split('-');
                    List<byte> list = new List<byte>();
                    foreach (string s in arr)
                    {
                        byte b = byte.Parse(s, System.Globalization.NumberStyles.AllowHexSpecifier);
                        list.Add(b);
                    }
                    byte[] newbyt = list.ToArray();
      

  2.   

            //16进制字符串转化数组
            public static byte[] HexStringToByteArray(string s)
            {
                s = s.Replace(" ", "");
                byte[] buffer = new byte[s.Length / 2];
                for (int i = 0; i < s.Length; i += 2)
                    buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
                return buffer;
            }
            //数组转化为16进制字符串
            public static string ByteArrayToHexString(byte[] data)
            {
                StringBuilder sb = new StringBuilder(data.Length * 3);
                foreach (byte b in data)
                    sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' '));
                return sb.ToString().ToUpper();
            }
      

  3.   

    string str = convert.tobase64string(bytes)
    bytes=convert.frombase64string(str)
      

  4.   

    并不是byte[]的所有内容都可以转换为string的。
      

  5.   

            byte[] byt = new byte[] { 0x7e, 0xff, 0x7e, 0xaa, 0x14, 0x00, 0x00, 0x00, 0x62 };
           string str= System.Text.Encoding.ASCII.GetString(byt);
           var bytes = System.Text.Encoding.ASCII.GetBytes(str);
    因为ASCII编码只需要一个字节而其它的编码需要2个字节以上
      

  6.   

    发送和显示汉字集的话可以尝试这2条转换指令//汉字转BYTE
    byte[] sendBuffer = System.Text.Encoding.GetEncoding("GB2312").GetBytes(senstr);//BYTE转回汉字
    string rec = System.Text.Encoding.GetEncoding("GB2312").GetString(recBuffer, 0, recBuffer.Length).Replace("\0","");
      

  7.   

    后面的replace指令,是当你开辟了过量的空间时候,转回string会以"\0"填充每一个多余的空间,用replace指令可以很好解决这一问题。