gpt4 book ai didi

c# - 如何将字节指针转换为结构

转载 作者:太空宇宙 更新时间:2023-11-03 19:06:35 25 4
gpt4 key购买 nike

我在将字节指针转换为结构时遇到问题(虽然当字节指针是参数时它隐式工作但它永远不会转换为新对象)

假设我已经

[StructLayout(LayoutKind.Sequential)]
public struct x
{
public y;
public zType;
}

这是一个表示 byte[] 的顺序结构,所以当我可以将该 byte[] 分配给这个结构并像 x.y 一样使用它时,不必担心偏移量

我的问题是,当我将一个字节指针 byte* ptr = byte[] 传递给一个以此结构作为参数的方法时,它起作用了,但是当我尝试正常转换它时,它不起作用

//this example works fine

{
byte[] myByteArray = new byte[];
fixed (byte* ptr = myByteArray)
someMethod(ptr)
}

someMethod(x myStruct)


//the next example however doesn't work
{
byte[] myByteArray = new byte[];
fixed (byte* ptr = myByteArray)
x myStruct = (myStruct)ptr
}

我希望我说得有道理,知道如何转换吗?

最佳答案

像下面这样重载隐式运算符

public unsafe static implicit operator X (byte* ptr)
{
var myX = new x();
x.y = *((type*)(ptr + offset));
return myX;
}

还重载 byte[] 运算符,使其成为类似的东西

public unsafe static implicit operator byte[] (X myX)
{
var myBuffer = new byte[size];
fixed(byte* ptr = myBuffer)
{
*((type*)(ptr + offset)) = myX.y;
}
return myBuffer;
}

现在您几乎可以执行以下操作

byte[] B = new byte[];
fixed(byte* ptr = B)
{
X myX = ptr;
byte[] C = X;
}

关于c# - 如何将字节指针转换为结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26226678/

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