Guter Weg, um zu konvertieren zwischen kurz-und bytes?
Muss ich nehmen Paare von bytes in-und output-shorts, und nehmen Sie shorts in-und output-Paare von bytes. Hier sind die Funktionen, die ich habe, speziell für einen solchen Zweck:
static short ToShort(short byte1, short byte2)
{
short number = (short)byte2;
number <<= 4;
number += (short)byte1;
return number;
}
static void FromShort(short number, out byte byte1, out byte byte2)
{
byte byte2 = (byte)(number >> 4);
short tempByte = (short)byte2 << 4;
byte byte1 = (byte)(number - tempByte);
}
Ich denke, das ist richtig, aber ich bin mir nicht sicher. Wenn dies nicht der richtige Weg, es zu tun, was ist? gibt es eine Möglichkeit, dies bereits im Rahmen?
- Sie müssen die Umschalttaste 8 bits, nicht 4.
- Eine interessante Dinge hier ist, dass in
ToShort
byte1 ist das MSB (also die auf der linken Seite), wo-wie inFromShort
byte1 ist die LSB (D. H. die auf der rechten Seite). Habe ich eingeschaltet, diese in meine Antwort ;-p
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kürzere version (auch shifting 8 bit statt 4):
ToShort
kurz vor der Rückkehr. Siehe Antwort von @john-kugelmanVerwenden BitConverter
byte[]
und dann aberBitConverter
ist implementiert, um zu analysieren, sagtebyte[]
danach scheint nur albern....Byte sind 8 bits, nicht 4, also Ihre Verschiebung aus ist. Sie erklärte auch lokale Variablen, die in der zweiten Funktion so, dass du nicht schreiben das die
out
Parameter wie Sie wollen. Es ist auch klarer/besser, wenn man beschränkt sich auf bitweise Operationen (&
,|
, und~
) wo es möglich ist.Beachten Sie, dass die linken und rechten Schichten durch null sind nicht erforderlich, streng genommen. Ich habe nur diejenigen, die in der Symmetrie. Auch, würde ich persönlich empfehlen, man lernt einfach bitweise arithmetische kalt und überspringen Sie schreiben Hilfsfunktionen wie diese. Keine Notwendigkeit sich zu verstecken die details mit etwas so grundlegend, IMHO.
Wenn Sie möchten, nehmen bytes... nehmen bytes; und Ihre Verschiebungen aus, und
|
wäre intuitiver:System.BitConverter