2013-02-21 18 views
6

ho byte srno [] nel mio codiceconvertire intero byte [] in uint

byte[] srno = new byte[6]; 

srno[0] = 0xff; 
srno[1] = 0x0f; 
srno[2] = 0x24; 
srno[3] = 0x12; 
srno[4] = 0x16; 
srno[5] = 0x0a; 

ora voglio questo valore nella uint come

uint a = 0xff0f2412160a; 

Come convertirlo?

+3

Un 'uint' è di 4 byte, ma devi 6 byte lì. In ogni caso, conosci la classe 'BitConverter'? – Ani

+0

Basta fare i conti: 'srno [0] * 0x10000000000 + srn0 [1] * 0x100000000 ...'. O qualsiasi altra cosa –

+0

@Ani: ok nessun problema dimmelo per ulong? Classe BitConverter ha bisogno dell'indice Non desidero per l'indice perticular Voglio convertire l'intero array – Kevan

risposta

8

Come suggerito da @animaonline, è necessario utilizzare BitConverter per convertire l'array di byte su uint o * ulong. Quindi hai 6 byte, uint è troppo piccolo per te. Dovresti convertire in ulong *. Ma convertitore richiede otto byte, in modo da creare nuovi array con numero di byte:

byte[] value = new byte[8]; 
Array.Reverse(srno); // otherwise you will have a1612240fff result 
Array.Copy(srno, value, 6); 
ulong result = BitConverter.ToUInt64(value, 0); 
Console.WriteLine("{0:x}", result); // ff0f2412160a 
+1

Funziona come volevo! – Kevan

0

In namespace System si trova la classe BitConverter biblioteca. Si desidera la funzione statica ToUInt64() come segue:

var a = BitConvert.ToUInt64(srno, 0); 

Sarà necessario regolare la dimensione della matrice per [8]

MSDN

+1

è necessario invertire prima l'array! –

0

tutti sembrano ignorare la codifica byte-ordine del suo atteso produzione. La classe BitConverter utilizza una codifica fissa (in genere Little-Endian, IIRC). Si presume che l'output nell'esempio sia Big-Endian. In un mondo perfetto devi semplicemente fare i conti da solo, ma è più semplice usare Array.Reverse quindi utilizzare la classe incorporata BitConverter.

ci sono probabilmente sarà un mucchio di risposte prima di arrivare a questo post così qui è davvero un rapido pezzo di codice non sicuro:

public static unsafe ulong ToULong(byte[] values) 
{ 
    byte* buffer = stackalloc byte[8]; 
    if (BitConverter.IsLittleEndian) 
     Array.Reverse(values); 
    System.Runtime.InteropServices.Marshal.Copy(values, 0, (IntPtr)buffer, values.Length); 
    return *(ulong*)buffer; 
} 
Problemi correlati