2016-11-04 166 views
0

是否有任何方法將字節[]轉換爲int8?我得到了一個包含測試輸入參數列表的二進制文件。參數的大小從uint32到uint8不等。我在文件中讀取沒有問題,棘手的是讓值顯示在GUI中。將字節[]轉換爲Int8

這裏的是我在做什麼的基礎:

private Byte[] blockSize; 
private Byte[] binSize; 

FileStream filen = File.OpenRead(file); 
BinaryReader br = new BinaryReader(filen); 

blockSize = br.ReadBytes(4); 
binSize = br.ReadBytes(1); 

沒有問題,這是考慮到參數文件的第32位(4個字節)的塊大小,並在接下來的8位(1字節)是我的binSize變量的值。問題出現在顯示中。

textBox1.Text = BitConverter.ToInt32(blockSize, 0).ToString(); 
textBox2.Text = BitConverter.ToString(binSize, 0).ToString(); 

假設我的二進制輸入文件包含以下5個字節的數據「0A 00 00 00 0A」。我的第一個文本框顯示'10',我的第二個文本框顯示'0A'。我想把十六進制值轉換成更人性化的十進制值。它似乎工作正常,只要輸入文件中的參數大於1個字節,所以我可以很容易地使用ToInt16或ToInt32將其轉換,但對於8bit類型我沒有任何東西。

+0

這怎麼可能呢?字節[]變成int8? –

+0

你是什麼意思int8?沒有這樣的事。 – EJoshuaS

+0

int8 =字節。字節[]轉換爲字節?我的天啊。 – AgentFire

回答

2

您的問題,r.ReadBytes(1);以字節數組的形式返回byte[]然後你的電話BitConverter.ToString(bytearray)作爲參數,它做了下:

的 字節的指定數組的每個元素的數值轉換爲它的等效十六進制字符串表示

BinaryReader有方法

int ReadInt32() 
byte ReadByte() 

變化類型的blockSizeintbinSizebyte並使用這些方法

int blockSize = br.ReadInt32(); 
byte binSize = br.ReadByte(); 

textBox1.Text = blockSize.ToString(); 
textBox2.Text = binSize.ToString(); 

從MSDN:
ReadInt32()

讀取從當前流的4個字節的符號整數並前進 流的當前位置由四個字節組成。

ReadByte()

讀取從當前流的下一個字節並且由一個字節前進流的當前位置 。

+0

好吧,我的問題是我使用ReadBytes(1)而不是ReadByte()。當我試圖將ReadBytes(1)作爲一個字節存儲時,我得到了一個錯誤,但是當使用ReadByte時它起作用。謝謝您的幫助。 – milnuts