Mono DataConvert可以用于读取3字节整数吗
本文关键字:字节 整数 读取 用于 DataConvert Mono | 更新日期: 2023-09-27 18:24:59
我试图读取一个特定的二进制文件,但它包含3字节的大端整数。我最近遇到了Mono DataConvert,除了这些3字节整数之外,它应该对我想要的大部分内容都很好。我不知道该怎么读。请注意,我不需要将它们保持为3字节整数,将它们读取到常规Int32
中是理想的。我正在阅读大量数据,所以我正在寻找高效的数据。有什么建议吗?
示例理想代码:
public Region(string regionFile)
{
var conv = DataConverter.BigEndian;
var chunks = new Chunk[Chunk.MaxLocations];
using (var fs = File.OpenRead(regionFile))
{
var buffer = new byte[4096];
fs.Read(buffer, 0, buffer.Length);
// Read chunk locations
for (int i = 0; i < Chunk.MaxLocations; ++i)
{
chunks[i] = new Chunk(conv.ToInt24(buffer, i * 4), buffer[i * 4 + 3]);
}
}
}
我想做一些类似的事情,除了conv.ToInt24
不存在。我想我可以写我自己的点点滴滴。。。
我复制了Mono的GetInt32
并对其进行了轻微修改:
public override int GetInt24(byte[] data, int index)
{
if (data == null)
throw new ArgumentNullException("data");
if (data.Length - index < 3)
throw new ArgumentException("index");
if (index < 0)
throw new ArgumentException("index");
int ret = 0;
byte* b = (byte*)&ret;
for (int i = 0; i < 3; i++)
b[2 - i] = data[index + i];
return ret;
}
似乎有效。