Estoy buscando un método que me permita obtener una gama de bits. Por ejemplo, si tengo los datos binariosLeer el rango de bits de la matriz de bytes
0 1 0 1 1 0 1 1 1 1 0 1 0 1 1 1
(2 bytes)
puede ser que necesite para obtener los datos de bits rango de 3 a 9. En otras palabras, estaría interesado en:
así que en breve me gustaría construir el método:
byte[] Read(byte[] data, int left, int right){
// implementation
}
de modo que si paso los datos new byte[]{91,215}, 3, 9
I conseguirá byte[]{122}
(nota byte 91 y 215 = 0 1 0 1 1 0 1 1 1 1 0 1 0 1 1 1
y byte 122 = 1 1 1 1 0 1 0
mismos datos binarios como el ejemplo.
Sería bueno si pudiera utilizar el operador <<
en matrices de bytes como hacer algo como:
byte[] myArray = new byte[] { 1, 2, 3 };
var shift = myArray << 2;
Si usted está interesado en saber por qué necesito esta funcionalidad:
I estoy creando un proyecto en una pizarra y a menudo necesito leer y escribir valores en la memoria. El cdf, sfr o ddf (referido como archivo de definición de chip) contiene información sobre un chip en particular. Ese archivo puede verse como:
; 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
Desde que estoy leyendo un montón de variables (a veces 80 veces por segundo) Me gustaría tener un algoritmo eficiente. Supongo que mi enfoque sería que si el tamaño de bytes es 8 entonces crearé un largo a partir de esos 8 bytes y luego utilizaré los operadores <<
y >>
para obtener lo que necesito. si el bytesize es 4 entonces crearé un int y usaré los operadores <<
y >>
, pero ¿cómo lo haré si necesito leer 16 bytes? Supongo que mi pregunta debería ser cómo implementar los operadores <<
y >>
en tipos de estructura personalizados.
80 veces por segundo? Esa es la misma velocidad que un juego 3D dibuja marcos en la pantalla. No necesitas un algoritmo muy eficiente. –