我需要我的代码执行类似的操作 - 代码num
中的某个地方获取一个值,之后我想从文件中正确读取,因为字节是数字num
。
例如:如果num为39382,我需要读取39382个字节并将它们放入byte []缓冲区;
在我有这样的事情之前:
ushort num = 0;
//.... num get some value;
byte[] buffer = bRead.ReadBytes(num);
现在我必须更改它,以便num
是UInt32
,但是ReadBytes
不起作用(因为它需要int32)。可能'num'超过int32。我这样修好了:
byte[] buffer = new byte[num];
for (int j = 0; j < num; j++)
{
buffer[j] = bRead.ReadByte();
}
它有效,但我想知道这是最好的方法吗?还是有另一个?
答案 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.