Come posso convertire un int a due byte in C#?Come posso convertire un int a due byte in C#?
risposta
Dando per scontato che desidera solo i byte bassi:
byte b0 = (byte)i,
b1 = (byte)(i>>8);
Tuttavia, dal momento che 'int' è 'Int32' che lascia altre 2 byte non catturate.
Questa è la mia soluzione. Molto deve essere più veloce di BitConverter. – Joshua
@Joshua, ho fatto un rapido benchmark (versione di rilascio, 50000000 iterazioni, cronometro e test completo ripetuti due volte per rimuovere vari artefatti) e la differenza tra la creazione di un array e l'utilizzo del bit-masking contro la chiamata di BitConverter è di circa 1ns per chiama la mia macchina. Se rimuovi la creazione dell'array (ottieni solo i due byte), la differenza è di circa 14ns. –
Non dubito dei vostri parametri di riferimento. BitConverter è lento in confronto perché deve allocare gli array. Se riesco a pre-rilevare la dimensione del mio array per migliaia di interi, posso risparmiare una quantità di tempo non banale. – Joshua
È possibile utilizzare BitConverter.GetBytes per ottenere i byte che comprendono un Int32. Ci saranno 4 byte nel risultato, tuttavia, non 2.
Un altro modo per farlo, anche se non così liscia come altri metodi:
Int32 i = 38633;
byte b0 = (byte)(i % 256);
byte b1 = (byte)(i/256);
È un Int16?
Int16 i = 7;
byte[] ba = BitConverter.GetBytes(i);
Questo avrà solo due byte in esso.
Quale parte della int? Due byte non sono sufficienti per codificare un intero valore intero a 32 bit. – dtb
'int' richiede 4 byte per la memorizzazione. Desideri perdere le informazioni negli MSB? –
Chi il * beep * ha downvotato questo valore. Questa è una domanda utile e interessante in quanto il modo C non funziona a buon diritto in C# e le API ovvie non esistono (BitConverter è lento e * rotto * in molti modi). – Joshua