Sto cercando un metodo che mi consenta di ottenere una gamma di bit. Ad esempio se ho i dati binariIntervallo di bit di lettura dall'array di byte
0 1 0 1 1 0 1 1 1 1 0 1 0 1 1 1
(2 byte)
Forse bisogno di ottenere dati da bit campo da 3 a 9. In altre parole che sarebbe interessato a:
così in breve gradirò costruire il metodo:
byte[] Read(byte[] data, int left, int right){
// implementation
}
modo che se passo i dati new byte[]{91,215}, 3, 9
OTTERRÒ byte[]{122}
(nota byte 91 e 215 = 0 1 0 1 1 0 1 1 1 1 0 1 0 1 1 1
e byte 122 = 1 1 1 1 0 1 0
stessi dati binari come esempio.
Sarebbe bello se potessi utilizzare l'operatore <<
su array di byte come fare qualcosa di simile:
byte[] myArray = new byte[] { 1, 2, 3 };
var shift = myArray << 2;
Se siete interessati a conoscere il motivo per cui ho bisogno di questa funzionalità:
I sto creando un progetto su una lavagna e spesso ho bisogno di leggere e scrivere valori nella memoria. Il cdf, sfr o ddf (definito come file di definizione del chip) contiene informazioni su un particolare chip. Questo file potrebbe essere simile:
; Name Zone Address Bytesize Displaybase Bitrange
; ---- ---- ------- -------- ----------- --------
sfr = "SPI0_CONTROL" , "Memory", 0x40001000, 4, base=16
sfr = "SPI0_CONTROL.SPH" , "Memory", 0x40001000, 4, base=16, bitRange=25-25
sfr = "SPI0_CONTROL.SPO" , "Memory", 0x40001000, 4, base=16, bitRange=24-24
sfr = "SPI0_CONTROL.TXRXDFCOUNT" , "Memory", 0x40001000, 4, base=16, bitRange=8-23
sfr = "SPI0_CONTROL.INT_TXUR" , "Memory", 0x40001000, 4, base=16, bitRange=7-7
sfr = "SPI0_CONTROL.INT_RXOVF" , "Memory", 0x40001000, 4, base=16, bitRange=6-6
Dal momento che sto leggendo un sacco di variabili (a volte 80 volte al secondo) mi piace avere un algoritmo efficiente. Credo che il mio approccio sarebbe che se il byte è 8 allora creerò un lungo da quegli 8 byte, quindi uso gli operatori <<
e >>
per ottenere ciò di cui ho bisogno. se il byte se 4 allora creerò un int e userò gli operatori <<
e >>
ma come lo farò se ho bisogno di leggere 16 byte però? Credo che la mia domanda dovrebbe essere come implementare gli operatori <<
e >>
su tipi di strutture personalizzate.
80 volte al secondo? È la stessa velocità con cui un gioco 3D disegna frame sullo schermo. Non hai bisogno di un algoritmo molto efficiente. –