16进制数据和数字的转换包含整数(有符号短整型short、无符号短整型ushort、有符号整型int、无符号整型uint、有符号长整型long、无符号长整型ulong)和小数(单精度浮点float和双精度浮点)。
首先在进行数据转换之前先要明确以下数据类型:
下表是对以上提到的数据类型的介绍:
2双字 = 4字
在串口通讯或其他的应用场景下,将字节转换为数字过程中会存在字节顺序的变换,字节高低位转换或字的高低位转换,所以在数据转换的时候要注意字节的顺序。在C#中可以使用BitConverter类轻松的进行数据转换。
参考MSDN的BitConverter类
string strHex = "32 CA B2 CA DE FA AD ff";
//将上面的16进制字符串转换为字节数组
byte[] bytes = GetBytes(strHex);
strHex.Replace(" ", "");
//前两个字节分别转换为ushort 和short
Console.WriteLine("将前两个字节数组{0}转换为ushort:{1}", strHex.Substring(0, 2), BitConverter.ToUInt16(bytes, 0));
Console.WriteLine("将前两个字节数组{0}转换为short:{1}", strHex.Substring(0, 2), BitConverter.ToInt16(bytes, 0));
//前四个字节分别转换为uint 和int
Console.WriteLine("将前四个字节数组{0}转换为uint:{1}", strHex.Substring(0, 4), BitConverter.ToUInt32(bytes, 0));
Console.WriteLine("将前四个字节数组{0}转换为int:{1}", strHex.Substring(0, 4), BitConverter.ToInt32(bytes, 0));
//前八个字节分别转换为ulong 和long
Console.WriteLine("将前八个字节数组{0}转换为ulong:{1}", strHex, BitConverter.ToUInt64(bytes, 0));
Console.WriteLine("将前八个字节数组{0}转换为long:{1}", strHex, BitConverter.ToInt64(bytes, 0));
//前四个字节转换为float
Console.WriteLine("将前四个字节数组{0}转换为float:{1}", strHex.Substring(0, 4), BitConverter.ToSingle(bytes, 0));
//前八个字节转换为double
Console.WriteLine("将前八个字节数组{0}转换为double:{1}", strHex, BitConverter.ToDouble(bytes, 0));
/// <param name="strHex">16进制字符串</param>
/// <returns></returns>
public static byte[] GetBytes(string strHex)
if (string.IsNullOrWhiteSpace(strHex)) return null;
strHex = strHex.Replace(" ", "");
byte[] bytes = new byte[strHex.Length / 2];
for (int i = 0; i < strHex.Length; i += 2)
bytes[i / 2] = Convert.ToByte(strHex.Substring(i, 2), 16);
return bytes;
引用:
https://www.cnblogs.com/zhaochengshen/p/7418906.html