1

我有一个二进制文件。一条数据可以是 8,16,32,64 位有符号和无符号 int。我正在尝试编写模板函数,这是我到目前为止所做的:

    public T[] GetLayerBytes<T>(int LayerNum)
    {
        int typeSize = Marshal.SizeOf(typeof(T));

        int layerPixelCount = typeSize * bitmapWidth * bitmapHeigth;

        string recFileName = "my.rec";

        using (FileStream fs = File.OpenRead(recFileName))
        using (BinaryReader br = new BinaryReader(fs))
        {
            fs.Seek(layerPixelCount * LayerNum, SeekOrigin.Begin);
            T[] b = new T[layerPixelCount];

            //fs.Read(b, 0, layerPixelCount); this doesn't work
            //br.Read(b, 0, layerPixelCount); this doesn't work too
            return b;
        }
    }

在 C++ 中,我会为此使用CFile::Read

有什么方法可以读取字节/int16/uint16 等,类似于我尝试过的没有针对不同T类型的开关/案例的方法?

提前感谢所有可能的优雅解决方案。

4

1 回答 1

1

根据您的评论,我建议使用BinaryFormatter.Deserialize方法。

BinaryFormatter 有一个Binder属性,可用于选择所需对象的类型。

此外,我认为你会想要使用SurrogateSelector转换你想要的序列化数据......

于 2013-01-28T14:58:34.847 回答