En efecto cuando conviertes un numero a string y lo presentas, elimina los ceros a la izquierda. Para conservarlos, hay que formatearlo de alguna manera...
...por ejemplo tu mismo puedes crear una función exprofeso... Sí, tratando con bytes.
Tras la devolucion tu vas concatenando la secuencia al lado que interese, con un espacio o el separador que te interese.
Por otro lado, si tienes una 'ristra de bits' en una cadena de texto, ('100011100011100001110000111...'), puedes igualmente contar su longitud (o puede que sepas directamente cuantos bytes son), y seccionar la cadena en un bucle con cada 8 bits...
En este caso tratándose del puerto serie es muy importante que tengas claro el orden en que los bits son recibidos en secuencia si de derecha a izquierda o al revés... para que la funcion opere exactamente como se espera que los datos aparezcan y no se confundan.
A menudo si hay que hacer mas que un procesado, no importa en primera instancia que los bits queden invertidos en orden dentro del string (pudiera ser así más eficiente), siempre que la funcion final los procese y devuelve correctamente ordenados.
Es cómodo añadir bits a una cadena de texto, a la derecha a medida que se reciben serialmente... por lo que cuando deban procesarse estan al revés. Sería interesante en este caso tener un función que admita un parámetro adicional que indique justamente si deben ordenarse de derecha a izquierda o al revés y así, la misma función puede tratar ambos casos. Esta ultima funcion cumple ese requisito...
Si la secuencia de bits es muy larga, te sugiero utilizar la clase bitarray (localizada en Collections), que permite operar a muy alta velocidad operando con bits, si bien parece que tu caso es operar con cadenas. En ese caso la funcion ByteToString es muy clara y sencilla.
Suele ser más eficiente (cuando la secuencia de bits sea enorme (pongamos millones)), calcular el tamaño de la cadena de salida de antemano y crearla en su tamaño total antes de entrar al bucle, y luego en vez de añadir, simplemente se 'pega' en su ubicación de destino. La concatenacion de cadenas, exige crear para la concatenación una nueva cadena... con cadenas cortas o poco numerosas no se nota perdida de eficiencia, si se notaría si por ejemplo hubiera que procesar un fichero de cierto tamaño... pongamos 20Mb. en tanto que crear el string de una tacada y procesarlo, sería prácticamente inmediato, una concatenación cada pocos bits para 20Mb. podría demorarse algunos o bastantes segundos (depende de la potencia del equipo, obviamente).
Un control ricthtextbox, es un control pesado, no lo utilices si no vas a hacer nada complejo... si es una simple presentacion de datos usa cualquier otro control ligero de texto. Sería como contratar un camión de 4 ejes, para ir al super a hacer la compra semanal... para lo que basta el 'carrito de la compra'...
...por ejemplo tu mismo puedes crear una función exprofeso... Sí, tratando con bytes.
Código [Seleccionar]
// Toma 1 en cada ciclo del bucle y lo concatena.
// NOTA: Va tomando el bit mas alto para concatenarlo a la derecha.
string = Funcion ByteToString(byte x)
byte k
entero n=128
string s
bucle para k desde 0 a 7
s += (x and n)
n /= 2
siguiente
devolver s
fin funcion
Tras la devolucion tu vas concatenando la secuencia al lado que interese, con un espacio o el separador que te interese.
Por otro lado, si tienes una 'ristra de bits' en una cadena de texto, ('100011100011100001110000111...'), puedes igualmente contar su longitud (o puede que sepas directamente cuantos bytes son), y seccionar la cadena en un bucle con cada 8 bits...
Código [Seleccionar]
string = Funcion SepararBitString(string bits, string separador, buleano LtoR) ' Left To Rigth
entero k, j
string s
// comenzamos desde la derecha, por que
// los numeros estan alineados siempre desde la derecha
// a diferencia de los strings... esto es,
// si faltara algun bit, seguiremos teniendo bien divididos los bytes.
// separador se puede omitir. Si siempre sera un espacio, ponlo directamente.
j = (bits.length-1)
Si LtoR= False
j -= 8
s = bits.substring(j, 8)
bucle para k desde j-8 hasta 0 en pasos de -8
s = bits.substring(k, 8) + separador + s
siguiente
// si los bits son forman bytes completos, al acabar el bucle k = -8, si no...
si (k > -8) // sobran bits a la izquierda que no completan un byte???
s = bits.left(-k) + separador + s
fin si
si no
bucle para k desde 0 hasta j en pasos de 8
s += (separador + bits.substring(k, 8))
siguiente
// si los bits son forman bytes completos, al acabar el bucle k = j+8, si no...
si (k < (j+8)) // sobran bits a la izquierda que no completan un byte???
s += (separador + bits.right(k-j) )
fin si
fin si
devolver s
fin funcion
En este caso tratándose del puerto serie es muy importante que tengas claro el orden en que los bits son recibidos en secuencia si de derecha a izquierda o al revés... para que la funcion opere exactamente como se espera que los datos aparezcan y no se confundan.
A menudo si hay que hacer mas que un procesado, no importa en primera instancia que los bits queden invertidos en orden dentro del string (pudiera ser así más eficiente), siempre que la funcion final los procese y devuelve correctamente ordenados.
Es cómodo añadir bits a una cadena de texto, a la derecha a medida que se reciben serialmente... por lo que cuando deban procesarse estan al revés. Sería interesante en este caso tener un función que admita un parámetro adicional que indique justamente si deben ordenarse de derecha a izquierda o al revés y así, la misma función puede tratar ambos casos. Esta ultima funcion cumple ese requisito...
Si la secuencia de bits es muy larga, te sugiero utilizar la clase bitarray (localizada en Collections), que permite operar a muy alta velocidad operando con bits, si bien parece que tu caso es operar con cadenas. En ese caso la funcion ByteToString es muy clara y sencilla.
Suele ser más eficiente (cuando la secuencia de bits sea enorme (pongamos millones)), calcular el tamaño de la cadena de salida de antemano y crearla en su tamaño total antes de entrar al bucle, y luego en vez de añadir, simplemente se 'pega' en su ubicación de destino. La concatenacion de cadenas, exige crear para la concatenación una nueva cadena... con cadenas cortas o poco numerosas no se nota perdida de eficiencia, si se notaría si por ejemplo hubiera que procesar un fichero de cierto tamaño... pongamos 20Mb. en tanto que crear el string de una tacada y procesarlo, sería prácticamente inmediato, una concatenación cada pocos bits para 20Mb. podría demorarse algunos o bastantes segundos (depende de la potencia del equipo, obviamente).
Un control ricthtextbox, es un control pesado, no lo utilices si no vas a hacer nada complejo... si es una simple presentacion de datos usa cualquier otro control ligero de texto. Sería como contratar un camión de 4 ejes, para ir al super a hacer la compra semanal... para lo que basta el 'carrito de la compra'...