首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

小弟我这里十六进制转成byte[],帮看看代码,哪里不对,老是异常

2012-08-27 
我这里十六进制转成byte[],帮看看代码,哪里不对,老是错误private static byte[] strToToHexByte(string he

我这里十六进制转成byte[],帮看看代码,哪里不对,老是错误
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未能找到任何可识别的数字

[解决办法]

C# code
 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);//转不了  }
[解决办法]
自己调试,下断点,加输出,不会调试的人没有指导的价值。
[解决办法]
hexString= hexString.Substring(i * 2, 2);
这句执行后,hexString只剩下2个字符,之后必然出错
[解决办法]
另外字符串" 1"这样的是不会被识别的,补位应该加0,可以保证不改变其值。
[解决办法]
C# code
        ///<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;        }
[解决办法]
首先,确保你读取的数据是正确的
byte[] tempb = strToToHexByte(" AA CC 1E D4 C3 C");
会不会存在上面的数据
第二,
if ((hexString.Length % 2) != 0)
hexString = " " + hexString;
如果存在不完整的数据,加上一个" "数据也是错误的,并且要养成良好的编码习惯,加大括号{}也不费事
第三,你的 hexString= hexString.Substring(i * 2, 2);取值有问题
下一次循环 你的hexString 值是上次的取值结果,已经把原数据冲掉了

热点排行