我想创建一个属性,将从我的字节数组(字节[]),使指针(字节*),这的确行得通,但是每当我修改这个返回的指针,我的字节数组不会被修改,这是我想要使用的一段代码。一个字节[]到字节*属性
public unsafe class PacketWriter
{
private readonly byte[] _packet;
private int _position;
public byte* Pointer
{
get
{
fixed (byte* pointer = _packet)
return pointer;
}
}
public PacketWriter(int packetLength)
{
_packet = new byte[packetLength];
}
//An example function
public void WriteInt16(short value)
{
if (value > Int16.MaxValue)
throw new Exception("PacketWriter: You cannot write " + value + " to a Int16.");
*((short*)(Pointer + _position)) = (short) value;
_position += 2;
}
//I would call this function to get the array.
public byte[] GetPacket
{
get { return _packet; }
}
}
而且,我知道我可以简单地删除属性,并把函数内部的代码,这可能会工作,但是我试图找出一种方法使用属性来做到这一点 - 除非这会降低性能在这种情况下,请让我知道。
你为什么要这样做,而不是简单地使用普通数组? – 2010-10-12 13:52:14
当垃圾收集器移动阵列时,此代码将炸弹或无声地破坏堆。在属性获取器返回后,该数组不再固定。赔率低但不为零。 – 2010-10-12 15:09:16
它只是让我感到你正在编写可能用于网络通信的代码,你可能想要保留网络字节顺序。在这种情况下,我建议在MemoryStream上使用BinaryReader和BinaryWriter,因为这些可以指定编码的字节顺序。您提出的代码和BitConverter都将使用平台端到端。 – 2010-10-14 03:09:04