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中就好了。
read()函数读到的数据是二进制的。也就是说buf数组里面的数据就悉芦蠢是二进制的。string str=Enconding.编码格式.GetString(buf)就可以把buf按相应编码格式转成可识别字符,也就是我们认识的字符。如果二进制数据代哗旦表的是10进制数字,那么str里就是对应的10进制数字。还有你这个串口读数据有点问题,会丢失数据。就是可睁陪能发生有的数据还没到缓存,你已经读了的情况。最简单方法是在 int n=serialPor.BytesToRead;前加一个Thread.Sleep(毫秒数)来给缓存一个接收数据的时间。多少毫秒你根据你给串口设置的波特率来设置。
把16进制字符串转10进制数字吵氏很知碰孙简单搭链
int i;
i=Convert.ToInt32("0a", 16);
i 就等于10
//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