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