在 C# 中,如何将 byte[] 重新解释为 T[],其中 T 是一个结构?

互联网 行业动态 更新时间:2024-06-13 00:19:06

Mat*_*son 5

要编写,您可以执行以下操作:

public static void WriteArrayToStream<T>(Stream output, T[] array) where T: unmanaged
{
    var span = array.AsSpan();
    var bytes = MemoryMarshal.AsBytes(span);
    output.Write(bytes);
}

对于阅读,您可以执行以下操作:

public static (T[] Result, int Count) ReadArrayFromStream<T>(Stream input, int n) where T: unmanaged
{
    T[] result = new T[n];
    var span   = result.AsSpan();
    var bytes  = MemoryMarshal.AsBytes(span);
    int count  = input.Read(bytes);

    return (result, count/Marshal.SizeOf<T>());
}

请注意,它返回一个元组,因为如果没有足够的数据可用,则只有第一个Count元素将具有有效数据。

这是一个显示写入和读取double[]数组的示例:

MemoryStream mem = new MemoryStream();
double[] data = Enumerable.Range(0, 100).Select(x => (double)x).ToArray();
WriteArrayToStream(mem, data);
Console.WriteLine(mem.Length); // 800

mem.Position       = 0;
var (array, count) = ReadArrayFromStream<double>(mem, 200);
Console.WriteLine(count); // 100
Console.WriteLine(array[42]);  // 42

更多推荐

是一个,如何将,结构,byte

本文发布于:2023-04-20 20:40:51,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/hyzx/daec23d13ad4d4c5035e9b9b35147b9a.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:是一个   如何将   结构   byte

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!