C#字節數組的常用解碼處理方法


在某些情況下,比如說串口通信或者讀取二進制的文件,通常會得到一個byte數組形式的數據。

然而對於這個數據處理常常令人苦惱,因為通常通信情況下,並不是一個字節代表一個字符或者某個數據,而是數據夾雜在字節與字節之間。

讀取文件得到的情況:

FileInfo fi = new FileInfo(@"E:\ABC.DAT");
long len = fi.Length;
FileStream fs = new FileStream(@"E:\ABC.DAT", FileMode.Open);
byte[] buffer = new byte[len];
fs.Read(buffer, 0, (int)len);
fs.Close();

1:將一個字節轉換為16進制的字符表示

String str= Convert.ToString(buffer[i], 16);   //16進制
String PrintStr = (Convert.ToString(buffer[i2], 16)).PadLeft(2, '0') + " ";   //轉換為2個字符長度的(不足左側補零)

2:ASCII編碼存儲的轉換(字節數組buffer的4到17為一個ASCII字符存儲的時間)

string str_stime = Encoding.ASCII.GetString(buffer,  4, 17);  
DateTime stime = new DateTime(Int32.Parse(str_stime.Substring(0, 4)),
                            Int32.Parse(str_stime.Substring(4, 2)),
                            Int32.Parse(str_stime.Substring(6, 2)),
                            Int32.Parse(str_stime.Substring(8, 2)),
                            Int32.Parse(str_stime.Substring(10, 2)),
                            Int32.Parse(str_stime.Substring(12, 2)),
                            Int32.Parse(str_stime.Substring(14, 3)));    

3:如果某個數據存儲在字節之間

     如2個字節      0000|0000||0000|0000    

                            字節0           字節1

     這兩個字節的前5個bit表示一個數據,再6個bit表示一個數據,后5個bit又表示一個數據

  由於在C#中int為32位數據,可以存儲4個字節的數據,int16可以表示2個字節,然后通過移位和位運算來處理。

  

int16 iData = buffer[1] + (buffer[0] << 8)
iData1 = iDate & 0x1F;
iData2 = (iDate >> 5) & 0x3F;
iData2 = (iDate >> 11) & 0x1F;

 

如有錯誤,敬請指教。

 


免責聲明!

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



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