C 對位元組 位元組陣列的各種操作

2022-09-28 03:30:15 字數 1556 閱讀 5787

最近在做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...