Ich habe ein Byte-Array result
. Ich würde gerne meinen Typ namens Info
konvertieren, die alle int
in das Byte-Array sind, aber alle von ihnen sind in unterschiedlicher Größe.Convert Int in andere Größe von Byte-Array
a = 4 Bytes
b = 3 Bytes
c = 2 Bytes
d = 1 Byte
Dies ist der Code habe ich versucht.
private byte[] getInfoByteArray(Info data)
{
byte[] result = new byte[10];
BitConverter.GetBytes((data.a)).CopyTo(result, 0);
BitConverter.GetBytes((data.b)).CopyTo(result, 4);
BitConverter.GetBytes((data.c)).CopyTo(result, 7);
result [9] = Convert.ToByte(data.d);
return result;
}
Allerdings habe ich herausgefunden, dass BitConverter.GetBytes
4 Bytes zurückgibt.
Gibt es allgemeine Lösungen, die unterschiedliche Byte-Größe zu einem Byte-Array erhalten können?
'int' wird immer als 4 Bytes gespeichert. 'GetBytes()' gibt nicht immer nur Byte-Arrays mit der Länge 4 zurück, sondern nur, weil Sie den Datentyp 'int' verwenden. Sie können [diese Antwort] (http://stackoverflow.com/a/11651620/74757) verwenden, um die Mindestanzahl von Bytes zu berechnen, die benötigt werden, um Ihre ganzzahligen Werte zu halten (vermutlich die 4, 3, 2 und 1 Größen wie aufgelistet zurückzugeben)), trimmen Sie dann das Ergebnis von '.GetBytes()' auf diese Länge, bevor Sie es in Ihr endgültiges Byte-Array kopieren. –
Es ist nicht klar, warum Sie unterschiedliche Byte-Längen für Ihre Felder haben möchten, besonders wenn es sich eigentlich um "int" -Typen handelt. Wenn Sie sicher sind, dass Sie wirklich nur 3, 2 oder 1 Byte für b, c und d brauchen, dann können c und d "kurz" und "byte" sein, was genau das ergibt, was Sie brauchen. Ihr Ergebnis für b hängt von der Endianess ab, aber Sie können das Array z. 'Array.Copy (BitConverter.GetBytes (data.b), 0, Ergebnis, 4, 3)'. I.e. Wenn Sie nicht alle Bytes wollen, ** kopieren Sie nicht alle Bytes **. –