如何用二进制阅读器读取UInt32字节数?

时间:2014-01-20 07:28:59

标签: c# binaryreader uint32

我需要我的代码执行类似的操作 - 代码num中的某个地方获取一个值,之后我想从文件中正确读取,因为字节是数字num

例如:如果num为39382,我需要读取39382个字节并将它们放入byte []缓冲区;

在我有这样的事情之前:

ushort num = 0;
//....  num get some value;
byte[] buffer = bRead.ReadBytes(num);

现在我必须更改它,以便numUInt32,但是ReadBytes不起作用(因为它需要int32)。可能'num'超过int32。我这样修好了:

byte[] buffer = new byte[num];
for (int j = 0; j < num; j++)
{
    buffer[j] = bRead.ReadByte();
}

它有效,但我想知道这是最好的方法吗?还是有另一个?

2 个答案:

答案 0 :(得分:0)

如果您确定num不会超出int32 max,您可以使用以下内容:

UInt32 num = 0;
//....  num get some value;
bRead.ReadBytes(checked((int)num));

如果num超出有符号的32位最大值,则抛出OverflowException。

答案 1 :(得分:0)

您可以使用:

public static ushort ToUInt32(
    byte[] value,
    int startIndex
)

指定源数组和编码数开始的位置。如果您的字节数组包含一个数字,startIndex将为0,且长度必须至少为4.