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.
 
Top