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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM