思考了很久的一个问题:1、目的:
通过PC向一个控制设备发送16进制命令,例如1F0A。该十六进制命令不能以字符串的形式发出,即不能是string变量,只能是byte[]数组。
需要调用的命令发送函数的形式为:send(byte[] command),参数command即为要发送的命令2、可行的方法之一:
该方法我已通过调试,证明是可行的。方法如下:
定义数组byte[] b1 = {0x1F,0x0A},然后将b1作为发送函数的参数即可,即send(b1)3、问题:
虽然上述方法可行,但应用中操作起来比较麻烦,比如当要把两个定义好的数组组合来发送,例如
byte[] b1 = {0x1F,0x0A};
byte[] b2 = {0x1B};
现在要发送命令1f=F0A1B,就需要组合数组b1和b2,方法是用数组的CopyTo方法:
byte[] b3 = new byte[3];
b1.CopyTo(b3,0);
b2.CopyTo(b3,2);
这样b3={0x1F,0x0A,0x1B};如果能把命令用字符串来保存,则操作起来很方便,如string s1 = "1F0A",但如何将字符串转为十六进制数值来发送呢?这个转换问题我一直没能解决,找了很多转换方法,最后结果都是将转换得到的十六进制作为文本字符串来输出而已,而不是得到十六进制数值,并将其放到byte[]数组中。希望得到各位同行的帮助。

解决方案 »

  1.   

    using System;string s = "1F0A";
                char[] charArray = s.ToCharArray();
                byte[] target = new byte[charArray.Length];
                for (int i = 0; i < charArray.Length;i++ )
                {
                    if (Uri.IsHexDigit(charArray[i]) == true)                    
                       target[i] = (byte)Uri.FromHex(charArray[i]);
                }不知道是不是符合你的意思。
      

  2.   

    string s = "1F0A";
    byte[] buffer = new byte[s.Length / 2];
    for (int i = 0; i < buffer.Length; i++)
    {
        buffer[i] = byte.Parse(s.Substring(i*2, 2), System.Globalization.NumberStyles.AllowHexSpecifier);
    }
      

  3.   

    谢谢楼上两位朋友的答复。两种方法我都作了测试,结果如下:需要得到的输出是:1F 0A1、phoenix0619提供的方法结果为01 0F 00 0A
    2、www_123du_com提供的方法结果为1F 0A,完全符合