有人可以解释'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();
我从第二行得到的错误是'无法将类型'字节[]'转换为'字节'
答案 0 :(得分:1)
有人可以解释
byte
和byte[]
之间C#的差异吗?
与所有其他类型的T
和T[]
之间的差异相同: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
属性是一个很好的起点。