Pla*_*00n 3 c# arrays pointers
C# 中是否可以在同一内存位置拥有多个不同类型的数组?我有一个很大的浮点数组,我需要在尽可能短的时间内将其转换为字节数组。我的想法是有一个指向浮点数组开头的字节数组,这样如果我更改浮点数组,字节数组也会自动更改,但我还没有找到解决方案。这在 C# 中是否可能,还是我必须找到另一种方法?
我需要字节数组是“byte[]”类型的实际数组,因为我必须调用我无法访问的库中的函数。
您无法使用实际数组(至少是内存中不同元素大小的数组)来做到这一点 - 但如果您愿意使用它来Span<T>代替,那么MemoryMarshal可能就是您正在寻找的。(您仍然可以使用数组作为底层存储。)
例如:
using System.Runtime.InteropServices;
Span<float> floats = new float[3];
Span<byte> bytes = MemoryMarshal.AsBytes(floats);
Console.WriteLine(bytes[0]); // 0
floats[0] = 1.234f;
Console.WriteLine(bytes[0]); // 182
bytes[0] = 200;
Console.WriteLine(floats[0]); // 1.2340021
Run Code Online (Sandbox Code Playgroud)
或者朝相反的方向走,保留一个byte[]变量但使用 aSpan<float>作为字节数组上的一种面向浮点的视图:
using System.Runtime.InteropServices;
byte[] bytes = new byte[100];
Span<float> floats = MemoryMarshal.Cast<byte, float>(bytes);
Console.WriteLine(bytes[0]); // 0
floats[0] = 1.234f;
Console.WriteLine(bytes[0]); // 182
bytes[0] = 200;
Console.WriteLine(floats[0]); // 1.2340021
Run Code Online (Sandbox Code Playgroud)