当前位置: 代码迷 >> C# >> 串口程序的 “十六进制发送”如何写
  详细解决方案

串口程序的 “十六进制发送”如何写

热度:524   发布时间:2016-05-05 05:30:55.0
求助 串口程序的 “十六进制发送”怎么写
我用ASCII骂发送写的是:
serialPort1.Write(txtSendData.Text);
count_s = count_s + txtSendData.Text.Length;
SendLabel.Text = count_s.ToString();
label9.Text = "发送数据成功";
label9.ForeColor = Color.Blue;
           
十六进制接收方法我写的是
{
StringBuilder b=new StringBuilder();
  int n=serialPort1.BytesToRead;
 Byte[] bytes=new Bytes[n];
 serialPort1.Read(bytes,0,n);
foreach(byte o in bytes)
         {
                b.Append(o.ToString("X2")+" ");
          } 
txtReceiveData.AppendText(builder.ToString());
R_Label.Text = (count_r + n).ToString();//记录字节数
}

十六进制发送的写法怎么都不会了 求帮助~
------解决思路----------------------
写过一个ModBus的:

string SendString = "010300000002C40B"; //需要发送的十六进制字符,2位表示一个十六进制字符,如01、03
byte[] senddata = HexStringToByte(SendString);
SerialPort.Write(senddata, 0, senddata.Length);  //0表示从senddate的第一个开始发送,长度为senddate的length

public byte[] HexString2Byte(string HexString)  //十六进制数组转换为byte数组。如data为"03ab6f"。则03按照十六进制为0*16+3 = 3,ab为 10*16+11 = 171,6f为6*16+15=111
        {
            int HexStringLength = HexString.Length;
            if (HexString.Length % 2 != 0)
            {
                HexString += " ";//空格
            }
            byte[] bytes = new byte[HexString.Length / 2];
            for (int i = 0; i < bytes.Length; i++)
            {
                try
                {
                    // 每两个字符按照十六进制计算为一个 byte,字符范围为0-9,a-f。
                    bytes[i] = byte.Parse(HexString.Substring(i * 2, 2), System.Globalization.NumberStyles.HexNumber);
                }
                catch
                {
                }
            }
            return bytes;
        }
------解决思路----------------------
既然能发送成功,也能接受成功,那就好了,为什么要执着非要16进制发送呢?
如果你是要显示给用户看的话,那在界面上显示成16进制就好了。
对于串口来说,你发送10进制还是16进制,这都不影响,反正最后会转换成byte数组了。
------解决思路----------------------
思路有问题
不是把文本框的内容变成16进制,而是文本框字符串在发送的时候转成16进制
接收也一样,是接收到的byte数组以什么显示,而不是把文本框里面的东西来回转换
------解决思路----------------------
硬要按照十六进制发送,用写字节的方法,用这个重载SerialPort.Write(Byte[],Int32,Int32)
举个栗子:

byte [] buff={0,1,2,3,4};
serialPort.Write(buff,0,5);//serialPort为你的串口实例,0是起始索引,5是要发送的字节数
  相关解决方案