Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用二进制读取器读取UInt32字节数?_C#_Binaryreader_Uint32 - Fatal编程技术网

C# 如何使用二进制读取器读取UInt32字节数?

C# 如何使用二进制读取器读取UInt32字节数?,c#,binaryreader,uint32,C#,Binaryreader,Uint32,我需要我的代码来做这样的事情-在代码num中的某个地方获得一个值,然后我想从文件中读取字节数,就像字节数num一样 例如:如果num是39382,我需要读取39382字节并将它们放入byte[]缓冲区 在我有这样的事情之前: ushort num = 0; //.... num get some value; byte[] buffer = bRead.ReadBytes(num); byte[] buffer = new byte[num]; for (int j = 0; j <

我需要我的代码来做这样的事情-在代码
num
中的某个地方获得一个值,然后我想从文件中读取字节数,就像字节数
num
一样

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

在我有这样的事情之前:

ushort num = 0;
//....  num get some value;
byte[] buffer = bRead.ReadBytes(num);
byte[] buffer = new byte[num];
for (int j = 0; j < num; j++)
{
    buffer[j] = bRead.ReadByte();
}
现在我必须更改它,使
num
UInt32
,但是
ReadBytes
不起作用(因为它需要int32)。“num”可能超过int32。我是这样修复的:

ushort num = 0;
//....  num get some value;
byte[] buffer = bRead.ReadBytes(num);
byte[] buffer = new byte[num];
for (int j = 0; j < num; j++)
{
    buffer[j] = bRead.ReadByte();
}
byte[]buffer=新字节[num];
对于(int j=0;j

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

如果您确定num不会超过int32 max,则可以使用以下选项:

UInt32 num = 0;
//....  num get some value;
bRead.ReadBytes(checked((int)num));
如果num超过有符号的32位最大值,这将引发OverflowException。您可以使用:

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

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

如果我知道它不会超过int32 max值,我会将其设为int。警告:在
gcAllowVeryLargeObjects
设置为true的情况下,分配>2GB数组只能在.NET 4.5 64位上工作。您可能希望使用
FileStream
或等效文件,这也是我希望使用更好的文件来更改它的原因之一。