System.Text.Encoding.Default.GetString(bc);是按ASCII转成string的,所以值会变
        static void Main()
        {
            string mystr = "ac";
            byte[] bc = StringToByte(mystr);
            string s = ByteToString(bc);
        }        static byte[] StringToByte(string s)
        {
            byte[] array = new byte[s.Length];
            for (int i = 0; i < s.Length; i++)
            {
                string str = s.Substring(i, 1);
                array[i] = (byte)Convert.ToInt32(str, 16);
            }            return array;
        }        static string ByteToString(byte[] bs)
        {
            StringBuilder sb = new StringBuilder();
            foreach (byte b in bs)
            {
                sb.Append(Convert.ToString(b, 16));
            }
            return sb.ToString();
        }

解决方案 »

  1.   

    楼上的朋友,你的ByteToString 返回的是byte的十六进制代码。而我的String应该是内码为byte的内码
    就是说byte 数组的2进制代码和 String的代码是一样的。System.Text.Encoding.Default.GetString是按ASCII码转,转的是内码
    你的函数以明码字符的型式显示的,我要的不是这个结果。string 中应该是不可显示的16进制内码,显示出来应该是内码
      

  2.   


                string   mystr= "ca" ;
                byte[] buf=Encoding.Default.GetBytes(textBox1.Text); //转为byte数组
                mystr = Encoding.Default.GetString(buf);             //转为string
      

  3.   

    字符串
    string 的成员 比如说 长度为1,第一个字符 是CA,但如果转成ASCII码的话是不可见字符,就变成?号(3f)了,那string中可以存在一个成员他的内码是CA吗?
      

  4.   

    理解错了,不好意思。StringToByte(mystr); @_@
    那直接用
    string   ss   =   System.Text.Encoding.Default.GetString(bc);   数组转成   string 
    byte[]   cc   =   System.Text.Encoding.Default.GetBytes(ss);   转回数组查看内容是否正确 
    就可以了
      

  5.   

    lz的StringToByte()函数是这样的吗?贴出来看看
            static void Main()
            {
                string mystr = "ca";            byte[] bc = StringToByte(mystr);            string a = ByteToString(bc);//Encoding.Default.GetString(bc); 
            }        static byte[] StringToByte(string s)
            {
                byte[] array = new byte[s.Length / 2];
                for (int i = 0; i < s.Length / 2; i++)
                {
                    string str = s.Substring(i, 2);
                    array[i] = (byte)Convert.ToInt32(str, 16);
                }            return array;
            }        static string ByteToString(byte[] bs)
            {
                StringBuilder sb = new StringBuilder();
                foreach (byte b in bs)
                {
                    sb.Append(Convert.ToString(b, 16));
                }
                return sb.ToString();
            }
      

  6.   

            public static byte[] StringToByte(string InString)
            {
                string[] ByteStrings = new string[InString.Length / 2];
                for (int i = 0; i < InString.Length; i += 2)
                {
                    ByteStrings[i / 2] = InString.Substring(i, 2);
                }
                byte[] ByteOut;
                ByteOut = new byte[ByteStrings.Length];
                for (int i = 0; i <= ByteStrings.Length - 1; i++)
                {
                    ByteOut[i] = byte.Parse(ByteStrings[i], System.Globalization.NumberStyles.HexNumber);
                }
                return ByteOut;
            }这个没问题,主要是System.Text.Encoding.Default.GetString(bc);
    当参数不是汉字也不是ASCII字符而是大于0x80的ASCII的扩展字符时,就出错了。就变成了?,即0x3F
      

  7.   

    try.
    把System.Text.Encoding.Default.GetString(bc); 换成ByteToString(bs);
    static   string   ByteToString(byte[]   bs) 
                    { 
                            StringBuilder   sb   =   new   StringBuilder(); 
                            foreach   (byte   b   in   bs) 
                            { 
                                    sb.Append(Convert.ToString(b,   16)); 
                            } 
                            return   sb.ToString(); 
                    } 
    我上面的代码有个地方错了
    static byte[] StringToByte(string s)
            {
                byte[] array = new byte[s.Length / 2];
                for (int i = 0; i < s.Length / 2; i++)
                {
                    string str = s.Substring(i*2, 2);
                    array[i] = (byte)Convert.ToInt32(str, 16);
                }            return array;
            }
      

  8.   

    奇怪...字符传干嘛要转成字节传送?要转的话...注意编码格式就可以...
    一般用 UTF-8
      

  9.   

    to r_swordsman:外部接口API int do(string str,int len);而我的数据来源是 0x01,0x02,0xca,0x87,0x99,0xaa,0x00,0x19 
    len=8明白?这个意思。
      

  10.   

    byte字符串到十六进制字符数组转换微软早已做好,为啥不用?System.Runtime.Remoting.Metadata.W3cXsd2001.SoapHexBinary 类,互相转换及其简单,我用了很长时间了。为啥没有人知道???
      

  11.   

    不错 这么转换 byte 值大于 128 就会出错