對於一個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(),同樣要注意大小端順序的問題,這裏就不再贅述了。