前言
串口通信中,接收转换的消息经常是string类型的十六进制数据,所以需要处理成十进制或二进制数据进行运算,目前项目中使用到相关的计算,所以自己查询记录下相关的使用方式。
一、字符串十六进制转十进制
示例:接收到的数据为str,可以根据十六进制值的大小选择以下方式进行存储。
string str = "FF";
byte b = byte.Parse(str,System.Globalization.NumberStyles.HexNumber);
short s = short.Parse(str, System.Globalization.NumberStyles.HexNumber);
int i = int.Parse(str,System.Globalization.NumberStyles.HexNumber);
int a = 177;
a.ToString("X2")
二、十进制转二进制
// 定义int和short类型的值
int intValue = 12345;
short shortValue = 123;
// 将int类型的值转换为二进制字符串
string intBinary = Convert.ToString(intValue, 2);
// 空位补0
string intBinaryPadded = intBinary.PadLeft(32, '0');
// 将short类型的值转换为二进制字符串
string shortBinary = Convert.ToString(shortValue, 2);
// 空位补0
string shortBinaryPadded = shortBinary.PadLeft(16, '0');
//其他方法
//十进制转二进制
Console.WriteLine(Convert.ToString(69, 2));
//十进制转八进制
Console.WriteLine(Convert.ToString(69, 8));
//十进制转十六进制
Console.WriteLine(Convert.ToString(69, 16));
//二进制转十进制
Console.WriteLine(Convert.ToInt32(”100111101″, 2));
//八进制转十进制
Console.WriteLine(Convert.ToInt32(”76″, 8));
//十六进制转十进制
Console.WriteLine(Convert.ToInt32(”FF”, 16));
三、十六进制转浮点类型
private double HexToDouble(string _data)
{
MatchCollection matches = Regex.Matches(_data, @"[0-9A-Fa-f]{2}");
byte[] bytes = new byte[matches.Count];
for (int i = 0; i < bytes.Length; i++)
bytes[i] = byte.Parse(matches[i].Value, System.Globalization.NumberStyles.AllowHexSpecifier);
double m = System.BitConverter.ToDouble(bytes, 0);
return m;
}
private float HexToFloat(string _data)
{
MatchCollection matches = Regex.Matches(_data, @"[0-9A-Fa-f]{2}");
byte[] bytes = new byte[matches.Count];
for (int i = 0; i < bytes.Length; i++)
bytes[i] = byte.Parse(matches[i].Value, System.Globalization.NumberStyles.AllowHexSpecifier);
float m = System.BitConverter.ToSingle(bytes, 0);
return m;
}