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

用的是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进制的啊?求指点。

数值是没有必要分几进制的,它在内存中就是二进制保存的。只是为了方便人们查看,可以转为n进制的格式显示在文本框中进行显示的。
所以
1 buf 就不要转为字符串了,直接以二进制格式存入数据库。下次也是以二进制的形式取出(就是byte[])

2 richTextBox1 要显示二进制也好,16进制也好 根据实际需要决定。象你上面的例子,builder 中的内容直接插入到richTextBox1中就好了。追问

直接存入数据库,数据库里显示的是什么数据啊?是二进制的?那怎么看呢?我还得做个显示收到的数据的部分。。。

追答

数据列就设置为二进制数组 ,比如 sql server 中的binary、varbinary或image。
数据库中的数据不一定非要能显示的。它只要管存数据就好了。怎么显示是界面上的事。

从数据库中读取出为二进制数组(byte[]),可以转为16进制的字符串显示,也可以转为二进制的字符串显示,或是界面上有一个选项按钮,由使用人员来选择什么格式显示。再比如这个二进制数组是一个图像文件,那么使用Image载入,然后显示在界面上。

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-04-02
read()函数读到的数据是二进制的。也就是说buf数组里面的数据就是二进制的。string str=Enconding.编码格式.GetString(buf)就可以把buf按相应编码格式转成可识别字符,也就是我们认识的字符。如果二进制数据代表的是10进制数字,那么str里就是对应的10进制数字。还有你这个串口读数据有点问题,会丢失数据。就是可能发生有的数据还没到缓存,你已经读了的情况。最简单方法是在 int n=serialPor.BytesToRead;前加一个Thread.Sleep(毫秒数)来给缓存一个接收数据的时间。多少毫秒你根据你给串口设置的波特率来设置。追问

可以理解为不用转成16进制显示,就用您的那个命令直接显示收到的数据就行么?那后边存入数据库就直接把str内数据存入么?数据库内是显示什么样的数据呢?

第2个回答  2014-04-02
把16进制字符串转10进制数字很简单
int i;
i=Convert.ToInt32("0a", 16);
i 就等于10
第3个回答  2014-04-02
//var 进制基数 = Convert.ToString(99, 16);
//Console.WriteLine(进制基数);
//Console.WriteLine(Convert.ToInt32(进制基数, 16));
//进制基数 = Convert.ToString(99, 8);
//Console.WriteLine(进制基数);
//Console.WriteLine(Convert.ToInt32(进制基数, 8));
//进制基数 = Convert.ToString(99, 2);
//Console.WriteLine(进制基数);
//Console.WriteLine(Convert.ToInt32(进制基数, 2));
http://social.msdn.microsoft.com/search/zh-cn?query=%E8%BF%9B%E5%88%B6

c#怎样将从串口读取的数据传入数据库
float nCurtp= getCurTP(); \/\/从串口取缓冲数据(自己写)1 再建立数据库联接实例:2 string intsql=String.Format( "insert into log(SETTP,CURTP) values({0},{1})" ,nSettp.tostring(),nCurtp.tostring());3 执行 查询. 调用 execute(sql)有返回即可....

C#串口通讯接收数据为16进制如下
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.IO.Ports;namespace PortTestAAA { class Program { static void Main(string[] args){ PortOperator myTestPort = new PortOperator();myTestPort.PortName = "COM1";myTestP...

如何用“C#”对串口发送16进制数?
接下来是准备要发送的16进制数据。在C#中,16进制数通常以字符串的形式表示,如"0xA5"或"A5"。为了通过串口发送这些数据,需要先将它们转换为字节流。这可以通过将每两个16进制字符转换为一个字节来实现。例如,字符串"A5"将被转换为字节0xA5。在转换过程中,可以使用C#的`Convert.ToByte`方法,但...

如何使用C# 进行串口的读写,请详细点
一、C#串口操作之读取串口数据:try { axMSComm2.CommPort = 1i; axMSComm2.InputMode = MSCommLib.InputModeConstants.comInputModeBinary; \/\/用于设置或返回传输数据的类型, \/\/此例程是通过Input属性以二进制方式检取回数据 axMSComm2.PortOpen = true; \/\/打开端口 axMSComm2.InBufferCount = 0; \/\/...

C#里如何对位数很长的数字(已处理为字符串)转化为16进制
一般的解决办法是自己写一个类型来储存这种超大数,当成 string 类型来处理,并自己写算法来对应加减乘除这些。暂时只能想到一个效率很低的思路,这么大的数要直接转成16进制的话算法是很麻烦的,建议先转成2进制,用短除法(除法的本质是多次减法,当然如果题主算法好可以用蒙哥马利算法来直接做除法。当...

如何用“C#”对串口发送16进制数?
1. 16进制数转换为字节:16进制数是一种数值表示方法,它使用16个不同的符号来表示数值,包括0-9来表示值0到9,以及A-F来表示值10到15。在C#中,可以使用`Convert.ToByte`方法将表示16进制数的字符串转换为对应的字节。例如,`Convert.ToByte`会将16进制数"0F"转换为字节15。2. 打开串口:在...

c#中如何对串口发送16进制数据,如何接收16进制数据
接收的如果是按字节接收(ReadByte),那么接收回来的数直接就可以用10进制表示,如果需要显示,可以直接在变量之后加.ToString();不明白可直接加我HI --- 之前的回答 byte[] t = new byte[2];t[0] = 0xAA;t[1] = 0xBB;串口对象.Write(t,0,2);其中3个参数顺序为:byte型数组,偏移(从...

c#中怎么把socket接收的数据存入数据库
并将接收到数据放到byts数组中。它的返回值为一个整型,是指接收数据的数量 if(length>0){ string msg = System.Text.Encoding.UTF8.GetString(byts, 0, r);} OK,到这步,你应该就会了吧,此时拿到的msg就是接收到回来的字符串了。然后启动数据库连接,将msg写入对应的表就可以了。

C# 串口十六进制发送
把通信协议以字符串的格式发送数据,接收到的数据为十六进制

C#串口通信接收16进制字符串截取问题!!!
string trim = Regex.Replace( text, @"\\s", "" ); \/\/先正则删空格 trim.SubString(12,8); \/\/然后截取就好了

相似回答