C# 將int型轉化爲byte/byte[]數組及轉16進制數問題

對於一個0~255之間的無符號整數:

int num = 255;
byte b = Convert.ToByte(num);

注:Convert.ToByte()方法能夠把許多數值類型、bool、char轉成byte,甚至可以把任意進制的合法數字的字符串基於相應的進制轉成byte【比如Convert.ToByte("3C",16)可以基於16進制把"3C"轉爲60】,但是其值範圍必須在0~255之間,即一個字節內。

對於一個-128~127的有符號整數:

int num = 127;
sbyte sb = Convert.ToSByte(a);

對於一個內容爲數字的字符串,下面的方法會每個數字都當作字符轉化,一個字符佔一個字節:

string num = "728";
byte[] b = Encoding.UTF8.GetBytes("728");
//b[0]=55 b[1]=50 b[2]=56

引申:轉十六進制數問題

我們已經知道一個16進制數佔4個比特,1個字節是8個比特,所以1個字節可存儲兩個16進制數。有時候我們需要把int型整數轉成16進制,並放入byte[]數組當中,這時候有以下兩種方法:

我們以728爲例,它的16進製爲2d8

方法一:先轉成16進制字符串,如果長度爲奇數在最前面補一個0。預先準備一個byte[]字節數組,長度爲字符串的一半(1個字節=兩個16進制數=兩個字符)或者長度爲4(int佔4個字節),對該字符串逐兩個字符進行切割,並調用上面提到的Convert.ToByte()方法轉成16進制,放入數組的字節元素當中。方法實現如下:

public static byte[] strToHexByte(string hexString) {
            if ((hexString.Length % 2) != 0){
                hexString = hexString.Insert(0, 0.ToString()); //如果長度爲奇,在開頭補零
            }
            byte[] returnBytes = new byte[hexString.Length / 2];//byte[]數組
            for (int i = 0; i < returnBytes.Length; i++){
                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);//每兩個字符轉byte,放入數組元素中。
            }
            return returnBytes;
        }

對於728,返回的數組是 rb[0]=2  rb[1]=216   (216就是d8的十進制)

方法二:使用BitConverter.GetBytes()方法

byte[] b = BitConverter.GetBytes(728);

因爲給的數字是int型,所以數組的長度固定是4個字節了。此時b的值是b[0]=216 b[1]=2 b[2]=0 b[3]=0  這裏我們發現這個方法轉換後結果的順序是從索引大到索引小(大小端的問題……),只要顛倒一下數組元素的順序就可以了。

PS:BitConverter類也提供了反過來從byte[]轉int的方法BitConverter.ToInt32(),同樣要注意大小端順序的問題,這裏就不再贅述了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章