private static byte[] strToToHexByte(string hexString)
        {
            hexString = hexString.Replace(" ", "");
            if ((hexString.Length % 2) != 0)
                hexString = " " + hexString;
            byte[] returnBytes = new byte[hexString.Length / 2];
            for (int i = 0; i < returnBytes.Length; i++)
            {
                hexString=  hexString.Substring(i * 2, 2);
                returnBytes[i] = Convert.ToByte(hexString, 16);//转不了
            }
            return returnBytes;
        }老是提示
Convert.ToByte未能找到任何可识别的数字

解决方案 »

  1.   

     for (int i = 0; i < returnBytes.Length; i++)
      {
      //怀疑问题出现在这一句.    substring(i*2,2)考虑是否会超出hexString的长度?
      hexString= hexString.Substring(i * 2, 2);
      returnBytes[i] = Convert.ToByte(hexString, 16);//转不了
      }
      

  2.   

    hexString= hexString.Substring(i * 2, 2);
    这句执行后,hexString只剩下2个字符,之后必然出错
      

  3.   


            ///<summary>
            ///将图片转换成16进制
            ///</summary>
            ///<param name="FileLoad">图片路径(string)</param>
            ///<returns>16进制(string)</returns>
            public static string Pic(string FileLoad)
            {
                string PicStr = "";
                FileStream fs = new FileStream(FileLoad, FileMode.Open, FileAccess.Read);
                BinaryReader br = new BinaryReader(fs);
                int length = (int)fs.Length;
                while (length > 0)
                {
                    byte TempByte = br.ReadByte();
                    PicStr += Convert.ToString(TempByte, 16) + " ";
                    length--;
                }
                fs.Close();
                br.Close();
                return PicStr.TrimEnd(' ');
            }
            /// <summary>
            /// 16进制流转图片
            /// </summary>
            /// <param name="pic16">16进制流数据</param>
            /// <returns>图片创建后的路径</returns>
            public static string TranSafePic(string pic16)
            {
                string FileLoad = "D:\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg";
                FileStream fs = new FileStream(FileLoad, FileMode.Create, FileAccess.Write);//创建图片存放路径
                BinaryWriter bw = new BinaryWriter(fs);
                char[] separator = { ' ' };
                String[] splitStrings = new String[pic16.Length];
                splitStrings = pic16.Split(separator);
                int i = 0;
                while (i < splitStrings.Length)
                {
                    byte tempByte = Convert.ToByte(splitStrings[i],16);
                    bw.Write(tempByte);
                    i++;
                }
                fs.Close();
                bw.Close();
                return FileLoad;
            }
      

  4.   

    首先,确保你读取的数据是正确的
    byte[] tempb = strToToHexByte(" AA CC 1E D4 C3 C");
    会不会存在上面的数据
    第二,
    if ((hexString.Length % 2) != 0)
      hexString = " " + hexString;
    如果存在不完整的数据,加上一个" "数据也是错误的,并且要养成良好的编码习惯,加大括号{}也不费事
    第三,你的 hexString= hexString.Substring(i * 2, 2);取值有问题
    下一次循环 你的hexString 值是上次的取值结果,已经把原数据冲掉了