在C#中,是否可能在同一内存位置有多个数组,而这些数组具有不同的类型? 我有一个很大的浮点数组,我需要在尽可能短的时间内将它转换为字节array. 我的 idea 是有一个指向Float数组开头的字节数组,这样如果我更改Float数组,字节数组也会自动更改,但我还没有找到这样做的解决方案. 在C#中这是可能的吗,或者我必须找到其他方法吗?

我需要字节数组是一个类型为"byte[]"的实际数组,因为我必须调用一个我无法访问的库中的函数.

推荐答案

actual arrays不能做到这一点(至少内存中的元素大小不同)--但如果您乐于使用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

或者相反,保持byte[]变量,但使用Span<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

Csharp相关问答推荐

如何将两个查询结果组合在C#ASP.NET MHC控制器中

使用其可能实现的基类和接口的属性的方法

Elasticsearch:当我try 使用c#将嵌套对象添加到filter中时出现问题

在C#中使用类中的对象值

.NET 8 Web-API返回空列表

在具有主构造函数的类中初始化属性时出现警告

Blazor EventCallback<;MyType<;T>;>;

查找表中的模式

如何在Cosmos SDK中控制超时、重试和重试之间的延迟?

Linux Docker上的.NET6在某个时间抛出后,在加密操作期间发生System.Security.Cryptography.CryptographicException:错误

有没有更好的方法来在CosmosDB上插入非id?

RX操作员使用先前值进行扫描,信号来自值本身

如何将%{v_扩展}转换为%{v_扩展}>>

如何从Entity Framework Core中填充ListIInterface

FakeItEasy自动嘲弄内容

为什么我在使用有效令牌的情况下仍未获授权?

如何解决System.StackOverflowException:抛出System.StackOverflowException类型的异常.&# 39;生成随机代码时发生异常?

实例化列表时的集合表达式是什么?

CsvHelper在第二次迭代时抛出System.ObjectDisposedException

将两个JSON文件与覆盖值的主文件合并