2016-11-04 165 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