最近在做socket伺服器,需要解析硬體的自定義協議,發現自己對c#的byte操作一竅不通,故記錄下來
1、單位元組byte轉int
byte b1=0x1f
;int int1=b1;
//或者
var b1 = new
byte ;
int int1= a[0];
其實byte存的是二進位制資料,但是我們在程式中可以直接給byte賦值 2進製、10進製、16進製制的數字,同理,我們從byte取出資料時,也可以直接按位元組取出來,比如int a1=b1[0],程式會自動將byte轉成int型別。當然此處只針對單位元組取數字的做法,不同的協議會有不同的存放資料的方法,具體還是要看協議定義。
2、int轉單位元組byte
int int1 = 128;byte value1 = (byte) int1;
同理,沒什麼好說的。
3、位元組陣列轉int(兩個位元組以上)
比如現在有乙個協議,用兩個位元組存乙個int數字,那麼我們可以用bitconverter類進行轉換。
此示例初始化位元組陣列,並在計算機體系結構為 little-endian(即首先儲存最低有效位元組)的情況下反轉陣列,然後呼叫 toint16(byte, int32) 方法以將陣列中的四個位元組轉換為
byte bytes = ;//if the system architecture is little-endian (that is, little end first),
// reverse the byte array.
if(bitconverter.islittleendian)
array.reverse(bytes);
int i = bitconverter.toint16(bytes, 0
); // 第二個引數表示開始位置
console.writeline(
"int:
", i);
// output: int: 25
bitconverter類提供了位元組陣列和基資料型別的相互轉換,使用過程中要注意計算機構的大小端
具體請檢視微軟官方文件:
3、位元組陣列轉字串 具體編碼還是要看具體環境而言
byte bytes = ;
encoding.utf8.getstring(bytes);
//使用gb2312需要先在主程式入口註冊 encoding.registerprovider(codepagesencodingprovider.instance);
encoding.getencoding("gb2312").getstring(bytes);
4、字串轉位元組陣列
encoding.utf8.getbytes("it is a string
");encoding.getencoding("gb2312").getbytes("it is a string");
C 位元組陣列操作
合併位元組陣列 public static byte combinebytearray byte bytearra return ams.toarray 位元組陣列擷取 32位 public unsafe static byte subbytearray byte src,int begin,int...
C 位元組陣列擷取
c 位元組陣列擷取 如 byte bt new byte 方法一 擷取位數規則 1 擷取2位長度的位元組陣列 用bitconverter.toint16 例如,從第2位開始擷取2個位元組則 bitconverter.toint16 bt,2 2 擷取4位長度的位元組陣列 用bitconverter....
unity AssetBundle位元組陣列加密
1.加密 對assetbundle的位元組陣列每位進行與key的異或處理 相同為0,不同為1 using system using system.collections.generic using system.io using system.linq using system.text names...