Frage

Ich frage mich, was der beste Weg, einen Byte-Array (Länge 4) auf eine ganze Zahl ist in vb.net zu konvertieren? Ich bin mir dessen bewusst BitConverter, aber es scheint wie eine ziemlich Abfall einen Funktionsaufruf zu tun, etwas zu tun, die in der Lage sein sollte, durch Kopieren 4 Byte Speicher durchgeführt werden. In die gleiche Richtung, was eine einzige Umwandlung / double aus ist es binäre Darstellung zu einer Einzel- / Doppel Variable.

War es hilfreich?

Lösung

„Byte Speicher kopieren“ ist etwas, das .NET ist nicht besonders geeignet für (und VB.NET noch weniger). Also, es sei denn, auf C Schalt eine Option für Sie ist, ein Funktionsaufruf ist so ziemlich unvermeidbar für diese.

BitConverter ist eine gut durchdachte, getestet Funktion. Natürlich können Sie es, indem Sie so etwas wie (in C #) vermeiden kann:

myInt = (*pbyte) | (*(pbyte + 1) << 8)  | (*(pbyte + 2) << 16) | (*(pbyte + 3) << 24);

(was, nebenbei bemerkt, genau , was BitConverter für Dich tut, wenn ein Byte-Array zu einem Integer Umwandlung ...).

Dies ist jedoch Code:

  • Sie viel, viel schwerer zu lesen und zu verstehen, als die BitConverter Äquivalent;
  • Ist eine der Fehler nicht überprüfen, ob BitConverter für Sie tut;
  • unterscheidet nicht zwischen Little Endian und Big-Endian-Darstellungen, wie BitConverter der Fall ist.

Mit anderen Worten: Sie können einen Funktionsaufruf „Speichern“, aber Sie werden am Ende deutlich schlechter (selbst wenn Sie nicht einführen alle Bugs). Im Allgemeinen wird das .NET Framework sehr, sehr gut gestaltet, und Sie sollten über die Verwendung seiner Funktionalität nicht zweimal überlegen, es sei denn, Sie mit ihm tatsächlichen (Performance) Probleme auftreten.

Andere Tipps

  

Ich bin mir dessen bewusst BitConverter, aber es   scheint wie ein ziemlich Abfall ein zu tun   Funktionsaufruf etwas zu tun,   sollte durch Kopieren 4 getan werden können   Byte Speicher.

Während sehe ich die Situation als „es scheint einen ziemlich Abfall versucht, eine effiziente Art und Weise zu hand Code, dies zu tun, wenn es bereits ein Methodenaufruf, der genau das tut, was ich will.“

Wenn Sie nicht gerade absolut überzeugt , dass Sie eine Performance-Engpass in genau dieses Stück Code haben, die Funktionalität durch den Rahmen vorgesehen verwenden.

mdb sind genau richtig, aber hier ist ein Code, der einen vb Byte-Array zu Little-Endian integer zu konvertieren sowieso ... (nur für den Fall Sie Ihre eigene BitConverter Klasse schreiben)

‘, wo Bits () ist die Byte-Array mit einer Länge von 4

Dim i as Integer 

i = (((bits(0) Or (bits(1) << 8)) Or (bits(2) << &H10)) Or (bits(3) << &H18))

Sie können Kopie sperren byte [] [int] System.Buffer Klasse.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top