gpt4 book ai didi

c# - 通用的类似 BitConverter 的方法?

转载 作者:太空狗 更新时间:2023-10-29 22:07:45 26 4
gpt4 key购买 nike

我最近遇到一种情况,我需要创建一个通用方法来从字节数组中读取数据类型。

我创建了以下类:


public class DataStream
{
public int Offset { get; set; }

public byte[] Data { get; set; }

public T Read<T>() where T : struct
{
unsafe
{
int dataLen = Marshal.SizeOf( typeof( T ) );
IntPtr dataBlock = Marshal.AllocHGlobal( dataLen );


Marshal.Copy( Data, Offset, dataBlock, dataLen );


T type = *( ( T* )dataBlock.ToPointer() );

Marshal.FreeHGlobal( dataBlock );

Offset += dataLen;

return type;
}
}
}

现在,抛开取消分配问题不谈,这段代码编译时不会出现这条消息:

Cannot take the address of, get the size of, or declare a pointer to a managed type ('T')

这看起来很奇怪,因为您应该能够根据方法上的 where T : struct 约束执行上述操作。

如果这段代码非常不正确,是否有任何简单的方法可以获取一系列字节并将它们转换为“T”类型?

谢谢!

最佳答案

与其尝试通过指针操作来执行此操作,不如将代码切换为使用 Mashal.PtrToStructure .这种方法就是专门针对这种场景设计的。

关于c# - 通用的类似 BitConverter 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1455581/

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