2009-07-17 13 views
1

Ich versuche, eine Funktion (C#), die 2 ganze Zahlen (ein Wert zu einem Byte [], ein Wert, um die Länge des Arrays zu setzen) und gebe ein Byte [] zurück, das den Wert darstellt. Im Moment habe ich eine Funktion, die nur Byte [] s mit einer Länge von 4 zurückgibt (ich nehme 32-Bit an).Konvertieren Sie eine ganze Zahl in ein Byte [] mit einer bestimmten Länge

Zum Beispiel sollte etwas wie IntobyteArray (0x01, 2) ein Byte [] von {0x00, 0x01} zurückgeben.

Hat jemand eine Lösung dafür?

Antwort

0

Nehmen Sie Ihren aktuellen Algorithmus und hacken Sie Bytes aus dem Array, wenn die angegebene Länge weniger als 4 ist, oder pad es mit Nullen, wenn es mehr als 4 ist. Klingt wie Sie haben es bereits gelöst für mich.

2

Sie können hierfür die Dienstprogrammklasse BitConverter verwenden. Obwohl ich nicht glaube, dass es Ihnen erlaubt, die Länge des Arrays anzugeben, wenn Sie ein int konvertieren. Aber Sie können das Ergebnis immer abschneiden.

http://msdn.microsoft.com/en-us/library/de8fssa4.aspx

-2
byte byte1 = (byte)((mut & 0xFF)^(mut3 & 0xFF)); 
byte byte2 = (byte)((mut1 & 0xFF)^(mut2 & 0xFF)); 

von

zitierte

C#: Cannot convert from ulong to byte

+0

Ist das Problem nicht lösen. Ich sollte für eine beliebige Anzahl von Bytes arbeiten, nicht nur für zwei. –

0

Sie eine Schleife wollen würde wie:

for(int i = arrayLen - 1 ; i >= 0; i--) { 
    resultArray[i] = (theInt >> (i*8)) & 0xff; 
} 
0
byte[] IntToByteArray(int number, int bytes) 
{ 
    if(bytes > 4 || bytes < 0) 
    { 
     throw new ArgumentOutOfRangeException("bytes"); 
    } 
    byte[] result = new byte[bytes]; 
    for(int i = bytes-1; i >=0; i--) 
    { 
     result[i] = (number >> (8*i)) & 0xFF; 
    } 
    return result; 
} 

Es füllt das result Array von rechts nach links mit den Bytes von weniger bis höchstwertig.

2

Sie könnten folgende

static public byte[] ToByteArray(object anyValue, int length) 
    { 
     if (length > 0) 
     { 
      int rawsize = Marshal.SizeOf(anyValue); 
      IntPtr buffer = Marshal.AllocHGlobal(rawsize); 
      Marshal.StructureToPtr(anyValue, buffer, false); 
      byte[] rawdatas = new byte[rawsize * length]; 
      Marshal.Copy(buffer, rawdatas, (rawsize * (length - 1)), rawsize); 
      Marshal.FreeHGlobal(buffer); 
      return rawdatas; 
     } 
     return new byte[0]; 
    } 

Einige Testfälle verwenden sind:

byte x = 45; 
    byte[] x_bytes = ToByteArray(x, 1); 

    int y = 234; 
    byte[] y_bytes = ToByteArray(y, 5); 

    int z = 234; 
    byte[] z_bytes = ToByteArray(z, 0); 

Dies wird eine Reihe von welcher Größe die Art zu erstellen ist, dass Sie passieren in Wenn Sie nur zurückgeben möchten. Byte-Arrays, sollte es ziemlich einfach zu ändern sein. Gerade jetzt seine in einer allgemeineren Form

Zu bekommen, was Sie in Ihrem Beispiel wollen Sie dies tun könnte:

int a = 0x01; 
    byte[] a_bytes = ToByteArray(Convert.ToByte(a), 2); 
Verwandte Themen