C# 對字節/字節數組的各種操作


最近在做socket服務器,需要解析硬件的自定義協議,發現自己對C#的byte操作一竅不通,故記錄下來

1、單字節byte轉int


byte
b1=0x1f; int int1=b1; //或者 var b1 = new byte[] { 0x1f, 0 ,0b00011111}; 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 = { 0, 0, 0, 25 };

// 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: {0}", i);
// Output: int: 25

BitConverter類提供了字節數組和基數據類型的相互轉換,使用過程中要注意計算機構的大小端

具體請查看微軟官方文檔:

https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/types/how-to-convert-a-byte-array-to-an-int

https://docs.microsoft.com/zh-cn/dotnet/api/system.bitconverter?view=net-6.0

 

3、字節數組轉字符串 具體編碼還是要看具體環境而言

byte[] bytes = { 66,83 };
Encoding.UTF8.GetString(bytes);
//使用GB2312需要先在主程序入口注冊 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Encoding.GetEncoding("GB2312").GetString(bytes); 

//轉16進制字符串 XX-XX-XX-XX-XX
BitConverter.ToString(bytes);


 

4、字符串轉字節數組

Encoding.UTF8.GetBytes("it is a string");
Encoding.GetEncoding("GB2312").GetBytes("it is a string");

 


免責聲明!

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



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