Я пытаюсь создать свойство, которое сделает указатель (byte *) из моего байтового массива (byte []), это действительно работает, однако всякий раз, когда я изменяю этот возвращенный указатель, массив байтов не будет изменен, это часть кода, который я хочу использовать.A byte [] to byte * property
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; }
}
}
Кроме того, я понимаю, что я мог бы просто удалить свойство и поместить код внутри функции, что, вероятно, работать, но я пытаюсь выяснить способ сделать это с помощью этого свойства - если это не снижает производительность , в таком случае, пожалуйста, дайте мне знать.
Почему вы делаете это вместо простого использования обычного массива? –
Этот код будет бомбить или бесшумно повреждать кучу, когда сборщик мусора перемещает массив. Массив больше не закрепляется после возвращения свойства getter. Коэффициенты низкие, но не ноль. –
Мне просто показалось, что вы пишете код, который, скорее всего, будет использоваться для сетевого общения, где вы, вероятно, захотите сохранить порядок байтов в сети. В этом случае я рекомендую использовать BinaryReader и BinaryWriter в MemoryStream, так как они позволяют указать конечную кодировку. Оба предлагаемого кода и BitConverter будут использовать конечную платформу. –