我想創建一個屬性,將從我的字節數組(字節[]),使指針(字節*),這的確行得通,但是每當我修改這個返回的指針,我的字節數組不會被修改,這是我想要使用的一段代碼。一個字節[]到字節*屬性
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