思考了很久的一个问题: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[]数组中。希望得到各位同行的帮助。
通过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[]数组中。希望得到各位同行的帮助。
解决方案 »
- 我在treeview 得doubleclick里写插入 代码, 执行的时候发现双击后有展开但马上又缩回去了
- 求助:PropertyGrid 中使用ComboBox项目时,如何使它只能选择不能输入呢?
- ▆▆▆▆▆▆▆.................VB 模块 类模块如何改成C#的写法 (高分)
- 用户控件引用父页面控件问题
- C#拆分字符串的问题
- 关于Remoting如何传递异常? 高分在线等!
- C# 的DataGrid列宽调整和单元选择
- 求教 给一条线段和一段圆弧,如何判断他们是否相交,给个算法吧
- 小问题,在DataGrid中自动生成一列1,2,3,4,5,顺序号。
- 如何知道纸张类型名称,获取纸张大小
- 我们常说的,高效分页存储过程...高效分页存储过程...意思就是这样吧
- 请问在.net中 如何通过button把当前时间保存到SQL中
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]);
}不知道是不是符合你的意思。
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);
}
2、www_123du_com提供的方法结果为1F 0A,完全符合