gpt4 book ai didi

c# - 作为多种类型的高效数组访问

转载 作者:太空宇宙 更新时间:2023-11-03 23:14:31 24 4
gpt4 key购买 nike

我正在使用 Entity Framework 并且需要存储一些二进制数据。我使用字节数组和一些辅助方法成功地以其他格式返回数据。

我是这样做的。

public class TestData
{
public double SampleRate { get; set; }

public byte[] ExtensionBytes { get; set; }

/// <summary>
/// Provides easy access as floats instead of bytes
/// </summary>
public float[] ExtensionValues
{
get
{
var result = new float[ExtensionBytes.Length / sizeof(float)];
Buffer.BlockCopy(ExtensionBytes, 0, result, 0, ExtensionBytes.Length);
return result;
}
set
{
byte[] result = new byte[value.Length * sizeof(float)];
Buffer.BlockCopy(value, 0, result, 0, result.Length);
ExtensionBytes = result;
}
}
}

它有效但看起来很浪费,在 C 中我可能会使用类似的东西

(float*)&byte_array)

这似乎是一个更简洁的解决方案,意味着数据不会一直在内存中来回复制。

在c#中是否有类似的简洁解决方案

另一种方法是在 Entity Framework 中存储 float 或 double 组。

最佳答案

根据与 float 组一起使用的变量的范围,您可以使用“fixed”关键字将字节数组固定在内存中,同时将其转换为浮点*并对其进行处理.像这样(语法可能不对):

fixed (byte* b = &theByteArray)
{
var f = (float*)b;
// do your work on f...
}

这需要您在项目的属性中将程序集标记为“不安全”。

关于c# - 作为多种类型的高效数组访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37716452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com