zoukankan      html  css  js  c++  java
  • 16进制字节和数字转换

    16进制数据和数字的转换包含整数(有符号短整型short、无符号短整型ushort、有符号整型int、无符号整型uint、有符号长整型long、无符号长整型ulong)和小数(单精度浮点float和双精度浮点)。 

    首先在进行数据转换之前先要明确以下数据类型: 

    下表是对以上提到的数据类型的介绍:

    类型

    范围

    大小

    字节数

    Framework类型

    short

    -32768 到  32767

    有符号16位整数

    2字节

    System.Int16

    ushort

    0 到 65535

    无符号16位整数

    2字节

    System.UInt16

    int

    -2147483648 到 2147483647

    带符号的32位整数

    4字节

    System.Int32

    uint

    0 到 4294967295

    无符号32位整数

    4字节

    System.UInt32

    long

    -9223372036854775808到

    9223372036854775807

    64位带符号整数

    8位

    System.Int64

    ulong

    0 到 18446744073709551615

    无符号64位整数

    8位

    System.UInt64

    float

    -3.4 *1038 到  3.4*1038

    单精度浮点

    4位

    System.Single

    double

    ±5.0*10-324 到 ±1.7*10308

    双精度浮点

    8位

    System.Double

    8位二进制 字节 字 双字的数据转换:

    8位二进制 = 1字节

    2字节 = 字

    2字 = 双字

    2双字 = 4字

    在串口通讯或其他的应用场景下,将字节转换为数字过程中会存在字节顺序的变换,字节高低位转换或字的高低位转换,所以在数据转换的时候要注意字节的顺序。在C#中可以使用BitConverter类轻松的进行数据转换。

    参考MSDN的BitConverter类

    名称

    说明

    DoubleToInt64Bits(Double)

    将指定的双精度浮点数转换为 64 位有符号整数。

    GetBytes(Boolean)

    字节数组的形式返回指定的布尔值。

    GetBytes(Char)

    字节数组形式返回指定的 Unicode 字符值。

    GetBytes(Double)

    字节数组形式返回指定的双精度浮点值。

    GetBytes(Int16)

    字节数组形式返回指定的 16 位有符号的整数值。

    GetBytes(Int32)

    字节数组形式返回指定的 32 位有符号的整数值。

    GetBytes(Int64)

    以字节数组的形式返回指定 64 位带符号整数值。

    GetBytes(Single)

    字节数组形式返回指定的单精度浮点值。

    GetBytes(UInt16)

    字节数组形式返回指定的 16 位无符号的整数值。

    GetBytes(UInt32)

    字节数组形式返回指定的 32 位无符号的整数值。

    GetBytes(UInt64)

    字节数组形式返回指定的 64 位无符号的整数值。

    Int64BitsToDouble(Int64)

    将指定的 64 位有符号的整数转换为双精度浮点数。

    ToBoolean(Byte[], Int32)

    返回一个布尔值,从字节数组中的指定位置处的字节转换。

    ToChar(Byte[], Int32)

    返回从字节数组中指定位置处的两个字节转换的 Unicode 字符。

    ToDouble(Byte[], Int32)

    返回从字节数组中指定位置的八个字节转换来双精度浮点数。

    ToInt16(Byte[], Int32)

    返回转换的字节数组中指定位置处的两个字节从一个 16 位带符号的整数。

    ToInt32(Byte[], Int32)

    返回转换的字节数组中指定位置处的四个字节从 32 位有符号的整数。

    ToInt64(Byte[], Int32)

    返回转换的字节数组中指定位置处的八个字节从一个 64 位带符号的整数。

    ToSingle(Byte[], Int32)

    返回从字节数组中指定位置的四个字节转换来单精度浮点数。

    ToString(Byte[])

    将指定的字节数组的每个元素的数值转换为其等效的十六进制字符串表示形式。

    ToString(Byte[], Int32)

    将字节的指定子数组的每个元素的数值转换为其等效的十六进制字符串表示形式。

    ToString(Byte[], Int32, Int32)

    将字节的指定子数组的每个元素的数值转换为其等效的十六进制字符串表示形式。

    ToUInt16(Byte[], Int32)

    返回从字节数组中指定位置处的两个字节转换的 16 位无符号的整数。

    ToUInt32(Byte[], Int32)

    返回从字节数组中指定位置的四个字节转换的 32 位无符号的整数。

    ToUInt64(Byte[], Int32)

    返回从字节数组中指定位置的八个字节转换的 64 位无符号的整数。

    下面是具体的实现:

    复制代码
                //8字节16进制字符串
                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));
    复制代码
    复制代码
            /// <summary>
            /// 将16进制字符串转换为字节数组
            /// </summary>
            /// <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

    HK
  • 相关阅读:
    刷题篇--热题HOT 71-80
    刷题篇--热题HOT 61-70
    双飞翼布局介绍-始于淘宝UED
    css布局——百度前端技术学院
    CSS多列布局Multi-column、伸缩布局Flexbox、网格布局Grid详解
    CSS之BFC详解
    深入理解BFC和Margin Collapse
    CSS 布局_如何实现容器中每一行的子容器数量随着浏览器宽度的变化而变化?
    3列、2列自适应布局,中部内容优先显示3列布局等方法
    三列布局,中间自适应
  • 原文地址:https://www.cnblogs.com/HarryK4952/p/14445615.html
Copyright © 2011-2022 走看看