C#十六进制处理难题

yuanxi 2006-10-29 09:54:04
思考了很久的一个问题:

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[]数组中。

希望得到各位同行的帮助。

...全文
272 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanxi 2006-11-21
  • 打赏
  • 举报
回复
谢谢楼上两位朋友的答复。

两种方法我都作了测试,结果如下:

需要得到的输出是:1F 0A

1、phoenix0619提供的方法结果为01 0F 00 0A
2、www_123du_com提供的方法结果为1F 0A,完全符合

www_123du_com 2006-10-29
  • 打赏
  • 举报
回复
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);
}
phoenix0619 2006-10-29
  • 打赏
  • 举报
回复
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]);
}

不知道是不是符合你的意思。

110,825

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧