c# 处理16进制数据的问题 大家有没有更好的写法交流一下
最近在学习上位机 通讯协议基本了解了所以动手操作了一下但是实际操做的时候问题又来了
那就是对接收数据的处理
因为我收发的都是16进制的数据
发送的话我会写接受的话涉及到对数据的一个提取 (接受的数据都是完整的一条需要对数据提取来选择需要的)
之后想了一下 然后网上查了一下自己写了一个出来 求大佬们批评指正(随便评分给一波public partial class Form1 : Form {
public Form1()
{
Control.CheckForIllegalCrossThreadCalls = false;
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
}
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)public string StringTo16(string inSting, Enum16Hex enum16)
{
string outString = "";
byte[] bytes = Encoding.Default.GetBytes(inSting);
for (int i = 0; i < bytes.Length; i++)
{
int strInt = Convert.ToInt16(bytes - '\0');
string s = strInt.ToString("X");
if (s.Length == 1)
{
s = "0" + s;
}
s = s + AddSplitString(enum16);
outString += s;
}
return outString;
}
{
int count = serialPort1.BytesToRead;
if (count >= 19)
{
byte[] buffrr = new byte;
serialPort1.Read(buffrr, 0, count);
label3.Text = Convert.ToString((buffrr + buffrr * 256));
label5.Text = Convert.ToString((buffrr + buffrr * 256));
label5.Text = Convert.ToString((buffrr + buffrr * 256));)
网上的16进制转换代码如下
public string StringTo16(string inSting, Enum16Hex enum16)
{
string outString = "";
byte[] bytes = Encoding.Default.GetBytes(inSting);
for (int i = 0; i < bytes.Length; i++)
{
int strInt = Convert.ToInt16(bytes - '\0');
string s = strInt.ToString("X");
if (s.Length == 1)
{
s = "0" + s;
}
s = s + AddSplitString(enum16);
outString += s;
}
return outString;
} 自己定义一个reader和writer,然后定义一些readhead,readint,readbyte之类的函数,然后操作起来就可以很方便了,也可以把数据给包装起来,定义一个类,分析数据然后对应数据赋值给字段 使用二进制字节数据先操作,然后再统一输出字符串,还有就是byte[]长度过长的话还是建议使用StringBuilder 字节数组 转 16进制字符串?
BitConverter.ToString(bytes).Replace("-", " ") wu0o0pj 发表于 2021-9-23 08:15
字节数组 转 16进制字符串?
BitConverter.ToString(bytes).Replace("-", " ")
谢谢学到了{:1_893:} 用C语言很好解决,用sprintf就行
不名物 发表于 2021-9-23 17:26
用C语言很好解决,用sprintf就行
问题这是 c# 哈哈 已经解决了感谢交流{:301_997:}
页:
[1]