我有这样段代码  
private static byte[] HexStringToByteArray(string s)
        {
            s = s.Replace(" ", "");
            if (s.Length % 2 != 0)
            {
                s += " ";
            }
            byte[] buffer = new byte[s.Length / 2];
            for (int i = 0; i < s.Length; i++)
            {
                buffer[i] = Convert.ToByte(s.Substring(i * 2, 2), 16);
            }
            return buffer;
        }
在转换的过程我跟踪调试,当跑到for循环里面时,报将字串符转换成datetime日期格式的错误,我这里没有这东西啊!怎么会报这样的错误呢?       

解决方案 »

  1.   


    //字节数组转16进制字符串
            /// <summary>
            /// 字节数组转16进制字符串
            /// </summary>
            /// <param name="bytes"></param>
            /// <returns></returns>
            public static string byteToHexStr(byte[] bytes)
           {
                string returnStr = "";
                if (bytes != null)
                {
                    for (int i = 0; i < bytes.Length; i++)
                    {
                         returnStr += bytes[i].ToString("X2");
                     }
                 }
                return returnStr;
             }
      

  2.   

    i < s.Length修改为buffer.Length
      

  3.   

    改为:for (int i = 0; i < buffer.Length; i++)
      

  4.   

    你已经将字符串转换成byte数组了,所以要用i<buffer.Length
      

  5.   

    那这个字符串可能不是一个规则的表示16进制的字符串.如果是规则的,不会存在字符个数为奇数的情况.你先这样处理,如果是奇数,补零,但这样结果肯定不是你要的.
    if (s.Length % 2 != 0)
      {
      s += "0";
      }
      

  6.   

    参考:
       /// <summary>
            /// 十六进制字符串转换字节数组(自动去掉空格)
            /// </summary>
            /// <param name="s">要转换的字符串</param>
            /// <returns>转换后的字节数组</returns>
            public static byte[] HexStringToByteArray(string s)
            {
                if (s.Length = 0)
                    throw new Exception("将16进制字符串转换成字节数组时出错,错误信息:被转换的字符串长度为0。");
                s = s.Replace(" ", "");
                byte[] buffer = new byte[s.Length / 2];
                for (int i = 0; i < s.Length; i += 2)
                    buffer[i / 2] = Convert.ToByte(s.Substring(i, 2), 16);
                return buffer;
            }
            #endregion
      

  7.   

    再来一个字节数组转换成十六进制字符串的:       /// <summary>
            /// 字节数组转换成十六进制字符串(不带空格)
            /// </summary>
            /// <param name="data">要转换的字节数组</param>
            /// <returns>转换后的字符串</returns>
            public static string ByteArrayToHexStringNoBlank(byte[] data)
            {
                StringBuilder sb = new StringBuilder(data.Length * 3);
                foreach (byte b in data)
                    sb.Append(Convert.ToString(b, 16).PadLeft(2, '0'));
                return sb.ToString().ToUpper();
            }
      

  8.   


    我都试过了!还是不行!
      for (int i = 0; i < buffer.Length; i += 2)
                {
                    string s1 = s.Substring(i, 2);
                    buffer[i / 2] = Convert.ToByte(s1, 16);            }
    主要是红色这一句报错,我实在是搞不懂,这关datetime什么事啊!
      

  9.   

    hexString = "asdasdas";
    我随便写的字符串
      

  10.   

    十六进制里没有s,只有数字和a-f
      

  11.   

    未处理 System.FormatException
      Message="未找到任何可识别的数字。"
      Source="mscorlib"
      StackTrace:
           在 System.ParseNumbers.StringToInt(String s, Int32 radix, Int32 flags, Int32* currPos)
           在 System.Convert.ToByte(String value, Int32 fromBase)
           在 ParkingManagementSys.DataAcquisition.CommPort.strToToHexByte(String hexString) 位置 E:\mxlworkspace\ParkingManagementSystem\ParkingManagementSys\ParkingManagementSys\DataAcquisition\CommPort.cs:行号 320
           在 ParkingManagementSys.DataAcquisition.CommPort.WriteToSerialPort(String TypeString, String str) 位置 E:\mxlworkspace\ParkingManagementSystem\ParkingManagementSys\ParkingManagementSys\DataAcquisition\CommPort.cs:行号 348
           在 ParkingManagementSys.ParamSet.button1_Click(Object sender, EventArgs e) 位置 E:\mxlworkspace\ParkingManagementSystem\ParkingManagementSys\ParkingManagementSys\ParamSet.cs:行号 39
           在 System.Windows.Forms.Control.OnClick(EventArgs e)
           在 System.Windows.Forms.Button.OnClick(EventArgs e)
           在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
           在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
           在 System.Windows.Forms.Control.WndProc(Message& m)
           在 System.Windows.Forms.ButtonBase.WndProc(Message& m)
           在 System.Windows.Forms.Button.WndProc(Message& m)
           在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
           在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
           在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
           在 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
           在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
           在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
           在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
           在 System.Windows.Forms.Application.Run(Form mainForm)
           在 ParkingManagementSys.Program.Main() 位置 E:\mxlworkspace\ParkingManagementSystem\ParkingManagementSys\ParkingManagementSys\Program.cs:行号 18
           在 System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
           在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
           在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
           在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
           在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
           在 System.Threading.ThreadHelper.ThreadStart()
      InnerException: 
      

  12.   

    我说的就是这个字符串,注意十六进制里没有s,只有0-9,a-f
      

  13.   

    楼主啊,如果你是想要把字符串转换成字节数组后通过网络或者串口发送的话,你试试这样:
    byte [] buffer=System.Text.Encoding.UTF8.GetBytes("测试汉字English123.");
    如果是把16进制数字的“0123456789ABCDEF”转换成16进制的0x000x010x020x030x040x050x060x070x080x090x0A0x0B0x0C0x0D的话就用上上面贴出来的函数。
      

  14.   

    PS:编码和解码网络数据或者串口数据时要用同样的编码格式,如果发送方使用ASCII编码你接收到以后也要把字节流用ASCII格式化成字符串。不然会出现乱码(主要出现在传送汉字等两字节或四字节字符时)。
      

  15.   

    Convert.ToByte这里找你的逻辑参数是诸如“6E”这种16进制形式的“字符串”,而非数值,这样的是没法转换的,或许你对数值类型的理解不够深入,Convert.ToByte所支持的字符串形式只有“00100100”这样的