0

我需要我的代码来做这样的事情 - 代码中的某处num得到一个值,然后我想从文件中读取,因为字节是数字num

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

在我有这样的事情之前:

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

现在我必须将其更改num为 a UInt32,但随后ReadBytes不起作用(因为它需要 int32)。'num' 可能超过 int32。我这样修复它:

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

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

4

2 回答 2

0

如果您确定 num 不会超过 int32 最大值,您可以使用以下命令:

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

如果 num 超出有符号的 32 位最大值,这将引发 OverflowException。

于 2014-01-20T07:48:29.197 回答
0

您可以使用:

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

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

于 2014-01-20T07:53:24.797 回答