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;
}
fonte
2013-02-21 12:39:54
Un 'uint' è di 4 byte, ma devi 6 byte lì. In ogni caso, conosci la classe 'BitConverter'? – Ani
Basta fare i conti: 'srno [0] * 0x10000000000 + srn0 [1] * 0x100000000 ...'. O qualsiasi altra cosa –
@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