日期:2014-05-18 浏览次数:20756 次
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,可以保证不改变其值。
------解决方案--------------------
///<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 值是上次的取值结果,已经把原数据冲掉了