摆脱指针和非托管代码

时间:2016-12-27 23:09:02

标签: c#

在朋友建议我为什么不使用非托管代码之后,我一直试图摆脱我目前在源代码中使用的非托管代码。但是我似乎在这里和那里都面临着一些问题。对于大多数情况,我使用Buffer.BlockCopy(),因为它似乎是最合适的方法,但仍然有一些我不知道该使用什么。

基本上,它用于处理在服务器和客户端之间发送的数据包。 WriteInt16是用于在字节数组中写入ushort值的函数。 (1.基本上只是在偏移20和22处这样做。)

我将在下面留下几个例子:

1

fixed (byte* p = Data)
{
    *((ushort*)(p + 20)) = X;//x is an ushort
    *((ushort*)(p + 22)) = Y;//y is an ushort
}

2

private byte* Ptr
    {
        get
        {
            fixed (byte* p = PData)
                return p;
        }
    }

3

public unsafe void WriteInt16(ushort val)
    {
        try
        {
            *((ushort*)(Ptr + Count)) = val;
            Count += 2;
        }
        catch{}
    }

1 个答案:

答案 0 :(得分:0)

假设有少量Endian平台和字节数组(未经测试):

*((ushort*)(p + 20)) = X;

Data[20] = (byte)X;
Data[21] = (byte)(X >> 8);

*((ushort*)(Ptr + Count)) = val;

PData[Count] = (byte)val;
PData[Count + 1] = (byte)(val >> 8);