永发信息网

c#里,通过串口收到的数据会转换为16进制字符串,想将数据存入数据库,应该怎么写?

答案:4  悬赏:10  手机版
解决时间 2021-12-28 13:13
  • 提问者网友:半生酒醒
  • 2021-12-28 07:23
用的是05版本的,我觉得16进制需要转成10进制存入吧,程序应该怎么写求大神指导啊,数据库链接神马的都编好了。下面是我写的实验用的程序,转10进制就蒙圈了已经。
private void DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)//16进制接收模式
{
int n = serialPort.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致
byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据
serialPort.Read(buf, 0, n);//读取缓冲数据
//依次的拼接出16进制字符串
this.Invoke((EventHandler)(delegate
{
foreach (byte b in buf)
{
builder.Append(b.ToString("X2") + " ");
}
string hexstring = builder.ToString();
int i = Int32.Parse(hexstring, System.Globalization.NumberStyles.HexNumber);
//this.richTextBox1.AppendText(builder.ToString());
this.richTextBox1.AppendText(i);
}));
}
中间把16进制字符串转成int型字符了应该是,然后怎么能变成10进制?另外如何存入sql数据库呢?存入的应该是10进制还是16进制的啊?求指点。
最佳答案
  • 五星知识达人网友:詩光轨車
  • 2022-01-10 01:41
数值是没有必要分几进制的,它在内存中就是二进制保存的。只是为了方便人们查看,可以转为n进制的格式显示在文本框中进行显示的。
所以
1 buf 就不要转为字符串了,直接以二进制格式存入数据库。下次也是以二进制的形式取出(就是byte[])

2 richTextBox1 要显示二进制也好,16进制也好 根据实际需要决定。象你上面的例子,builder 中的内容直接插入到richTextBox1中就好了。
全部回答
  • 1楼网友:轻雾山林
  • 2022-01-10 02:22
把16进制字符串转10进制数字很简单 int i; i=Convert.ToInt32("0a", 16); i 就等于10 再看看别人怎么说的。
  • 2楼网友:痴妹与他
  • 2022-01-10 02:14
read()函数读到的数据是二进制的。也就是说buf数组里面的数据就是二进制的。string str=Enconding.编码格式.GetString(buf)就可以把buf按相应编码格式转成可识别字符,也就是我们认识的字符。如果二进制数据代表的是10进制数字,那么str里就是对应的10进制数字。还有你这个串口读数据有点问题,会丢失数据。就是可能发生有的数据还没到缓存,你已经读了的情况。最简单方法是在 int n=serialPor.BytesToRead;前加一个Thread.Sleep(毫秒数)来给缓存一个接收数据的时间。多少毫秒你根据你给串口设置的波特率来设置。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯