C#16进制转换成10进制

由于工作需要,解码我获取了一条数据00000000000000000000000080808080000000000000000000008000000080808080... 由于工作需要,解码 我获取了 一条数据 00 00 00 00 00 00 00 00 00 00 00 00 80 80 80 80 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 80 80 80 00 80 80 80 80 00 00 80 00 80 00 00 00 00 80 80 00 00 80 00 是按16进制读出来的 想换成10进制如何换? 这行数字代表的是 1.75 有木有搞过的高手叙述下。。。 展开
 我来答
匿名用户
2013-09-27
展开全部
给你发一个读取串口数据的类,按需求修改接收字符串的长度和接收规则
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO.Ports;

namespace GSM.Cls
{
class ReadComm
{
internal class CommReader
{
//单个缓冲区最大长度
private const int max = 6;
//数据计数器
private int count = 0;
private int countData = 1;
//变长标志数
//private int bufCount = 0;
//数字缓冲区
private Byte[] buffer = new Byte[max];
///
/// 串口控件
///
private SerialPort _Comm;
///
/// 扫描的时间间隔 单位毫秒
///
private Int32 _interval;

//数据处理函数
public delegate void HandleCommData(Byte[] data,SerialPort sPort);
//事件侦听
public event HandleCommData Handlers;

//负责读写Comm的线程
private Thread _workerThread;

internal CommReader(SerialPort comm, Int32 interval)
{
_Comm = comm;
//创建读取线程
_workerThread = new Thread(new ThreadStart(ReadComm));
//确保扫描时间间隔不要太小,造成线程长期占用cpu
if (interval < 10)
_interval = 10;
else
_interval = interval;
}

//读取串口数据,为线程执行函数
public void ReadComm()
{
while (true)
{
Object obj = null;
try
{
//每隔一定时间,从串口读入一字节
//如未读到,obj为null
obj = _Comm.ReadByte();
}
catch
{
}

if (obj == null)
{ //未读到数据,线程休眠
Thread.Sleep(_interval);
continue;
}
//将读到的一字节数据存入缓存,这里需要做一转换

buffer[count] = Convert.ToByte(obj);
if(buffer[0] == 0xFE )
{
count++;
}

//计算接收数据的结束位
//当达到指定长度时,这里的判断条件可以根据要求变为:
// 判断当前读到的字节是否为结束位,等等
//计算结束标志位,协议为除了开始标志位的其他数据值的异或值

if (count == 6 && buffer[1]==0x04)//我的接收规则是6位长度,第二个字节是0x04
{
//复制数据,并清空缓存,计数器也置零
Byte[] data = new Byte[6];//bufCount
//Array.Copy(buffer, data, bufCount);
Array.Copy(buffer, 0, data, 0, 6);
count = 0;
Array.Clear(buffer, 0, max);
//通知处理器处理数据
if (Handlers != null)
Handlers(data,_Comm);
}

if(count ==6 && buffer[1] != 0x04)
{
Array.Clear(buffer, 0, max);
count=0;
}
}
}

//启动读入器
public void Start()
{
//启动读取线程
if (_workerThread.IsAlive)
return;
if (!_Comm.IsOpen)
_Comm.Open();
_workerThread.Start();
while (!_workerThread.IsAlive);
}

//停止读入
public void Stop()
{
//停止读取线程
if (_workerThread.IsAlive)
{
_workerThread.Abort();
_workerThread.Join();
}
_Comm.Close();
}
}
}
}

// 把十六进制字符串转换成字节型和把字节型转换成十六进制字符串
public static string ByteToString(byte[] InBytes)
{
string StringOut = "";
foreach (byte InByte in InBytes)
{
StringOut = StringOut + String.Format("{0:X2} ", InByte);
}
return StringOut;
}

public static byte[] StringToByte(string InString)
{
string[] ByteStrings;
ByteStrings = InString.Split(" ".ToCharArray());
byte[] ByteOut;
ByteOut = new byte[ByteStrings.Length - 1];
for (int i = 0; i == ByteStrings.Length - 1; i++)
{
ByteOut[i] = Convert.ToByte(("0x" + ByteStrings[i]));
}
return ByteOut;
}

你想把十六进制转换为十进制:
其实不用转换,接收来的是字节数组,数组都是十进制的。 只是你要按16进制去发送。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式