将byte []转换为byte

时间:2016-12-08 18:17:54

标签: c# byte

有人可以解释'byte'和'byte []'之间C#的区别吗?我的困惑是为什么我不能将byte []数组中的单个字节元素分配到定义为类型'byte'的变量中。

例如,这有效:

byte binSize;
binSize = br.ReadByte();

但这不是:

byte binSize1;
binSize1 = br.ReadBytes(1);

我查看了Microsoft Binary Reader class,我看到第一个示例返回一个字节,第二个示例返回一个字节数组。我知道了。但是有一些简单的方法来转换'ReadBytes'读入的单字节并将其转换为可以存储在'byte'变量中吗?

当我想将我读到的内容转换为整数时,这是一个问题。只有下面带有'binSize'的行才有效,带'binSize1'的行不会。

txt.Text = BitConverter.ToInt16(binSize, 0).ToString(); 
txt.Text = BitConverter.ToInt16(binSize1, 0).ToString(); 

我从第二行得到的错误是'无法将类型'字节[]'转换为'字节'

2 个答案:

答案 0 :(得分:1)

  

有人可以解释bytebyte[]之间C#的差异吗?

与所有其他类型的TT[]之间的差异相同:T是单个项目,而T[]是数组。

  

是否有一些简单的方法来转换ReadBytes()读入的单字节并将其转换为可以存储在byte变量中?

如果您知道函数返回的数组只包含一个字节,请将[0]应用于其返回值:

binSize1 = br.ReadBytes(1)[0];

请注意,此方法不安全,因为您不确定br.ReadBytes(1)至少有一个字节。最好单独检查一下:

var bytes = br.ReadBytes(1);
if (bytes.Length == 1) {
    var binSize1 = bytes[0];
}

答案 1 :(得分:0)

如果你有一个字节集合,你显然不能将它存储在单个字节中。但是,您可以存储该集合的给定项目,例如,第一个:

byte myByte = byteArray[0];

或没有数组

 byte myByte = byteCollection.First();

当然,在尝试抓取之前,您应该确保 是第一个。数组的Length属性是一个很好的起点。