Spanish [Solucionado] Uso de BytesToString

angel_

Well-Known Member
Licensed User
Longtime User
No acabo de entender el punto 13 y cómo se puede aplicar, ¿alguien lo podría explicar? también me serviría un enlace o un ejemplo, mejor en español.

 

JordiCP

Expert
Licensed User
Longtime User
Buenas,

Supón que tenemos una serie de bytes producidos por un dispositivo donde cada bit o conjunto de bits represente un estado de algo, como podría ser producido por un Arduino --> estos bytes en sí son de origen 'binario', es decir, que en un caso general pueden tomar cualquier valor y de cara a un proceso de conversión pueden suponerse de origen 'random'.

Un proceso de conversión (en este caso de bytes a String) es correcto si es reversible. Para que se cumpla esto, no se debe perder información.
Algunos ejemplos:
  • Si queremos mostrar por ejemplo estos bytes en un log para debug, tiene sentido hacer la conversion a Hex, o en la base que sea --> 0x43 0xA5 ... No estamos perdiendo información
  • Si los queremos transmitir por ejemplo a un servidor, los podemos codificar en base64. Al otro lado aplican la operación inversa, también todo correcto.
  • Conversión directa a String: tiene sus peligros. La conversión de byte a String necesita que especifiquemos un estandar. Suponemos que utilizamos UTF-8
    • 1) El primer peligro es obvio, y es que en el proceso de 'desconversión', al igual que en los casos anteriores, es necesario utilizar el mismo estandar.
    • 2) El segundo es el mas importante: UTF-8 es un estandar de longitud variable. Esto quiere decir que, mientras que algunos caracteres (creo que los 127 primeros) se representan con solo un byte, otros pueden ocupar 2,3 o 4 bytes. La manera de 'leerlo' es que si un byte tiene el bit más alto a 1, junto con otras reglas, contiene también información sobre cuántos lo siguen.
      • El problema de esto es que no todas las combinaciones de bytes son válidas. Es decir, si el "codificador a UTF-8" encuentra un byte que vale por ejemplo 128 (bit mas alto = 1), y los siguientes no cumplen unos criterios en sus bits de información, lo considerará como carácter no válido, pondrá uno por defecto, y habremos perdido esa información. Al efectuar la conversión inversa, ya no tendremos lo mismo.

En cambio, esta conversión no dará ningún problema si los bytes son < 127 (bit mas alto a 0). Por esto @Erel mencionaba, que aunque puede dar resultados correctos, a la larga puede acabar dando errores. En un caso general, sería una mala práctica.

AQUÍ hablan un poco de esto.
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…