在朋友建议我为什么不使用非托管代码之后,我一直试图摆脱我目前在源代码中使用的非托管代码。但是我似乎在这里和那里都面临着一些问题。对于大多数情况,我使用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{}
}
答案 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);