我正在尝试读取特定的二进制文件,但它包含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
不存在。我想我可以通过位移来编写自己的...
答案 0 :(得分:0)
我复制了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;
}
似乎工作。