2016-12-27 2 views
0

Ich habe versucht, den nicht verwalteten Code, den ich momentan für meinen Quellcode verwende, zu entfernen, nachdem ein Freund vorgeschlagen hat, warum ich nicht verwalteten Code verwenden sollte. Allerdings scheint es hier und da einige Probleme zu geben. In den meisten Fällen habe ich Buffer.BlockCopy() verwendet, da dies die geeignetste Methode zu sein schien, aber es gibt immer noch einige, bei denen ich nicht sicher bin, was ich verwenden soll.Entfernen von Zeigern und nicht verwaltetem Code

Im Grunde wird dies verwendet, um Pakete zu behandeln, die zwischen einem Server und einem Client gesendet werden. WriteInt16 ist eine Funktion zum Schreiben von ushort Werten im Byte-Array. (1. tut dies im Grunde nur bei Offset 20 und 22).

Ich werde ein paar Beispiele unten verlassen:

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

Warum Sie nicht über einen starken Einsatz kommen, für was auch immer diese Daten darstellt? Randnotiz: Ich mag es, wie dein Freund dir gesagt hat, dass es unsicher ist, anstatt nur zu erkennen, dass du aus dem Schlüsselwort "unsicher" kommst. – itsme86

+0

Ich wusste, dass es durch das Schlüsselwort unsicher war, was ich meinte ist, dass er mir erklärte, warum ich nicht unsicheren Code und seine Implikationen verwenden sollte – Noobzilla

+1

Was soll der Code tun? Es ist schwer, Alternativen vorzuschlagen, wenn nicht klar ist, was der Zweck ist. –

Antwort

0

Unter der Annahme, wenig Endian-Plattform und Byte Arrays (nicht getestet):

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

ist

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

und

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

ist

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