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 DataConvert可以用于读取3字节整数吗

我复制了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;
}

似乎有效。