1

特定のバイナリファイルを読み取ろうとしていますが、3バイトのビッグエンディアン整数が含まれています。私は最近MonoDataConvertに出くわしました。これは、これらの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存在しないことを除いて、私はそのようなことをしたいです。ビットシフトで自分で書けると思います...

4

1 に答える 1

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;
}

うまくいくようです。

于 2012-02-17T03:09:00.450 に答える