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
或等效文件,这也是我希望使用更好的文件来更改它的原因之一。