IIC2233 / Syllabus

149 stars 13 forks source link

Duda sobra almacenamiento de datos enviados #669

Open MTGG123 opened 6 days ago

MTGG123 commented 6 days ago

Prerrequisitos

(Marcar colocando una X entre los corchetes los ítems que ya hiciste, así: "[X]")

Duda

Holaa, hice un archivo con funciones para codificar y decodificar los mensajes enviados, pero a la hora de decodificar, guardo los datos en un dict y estos se guardan como un byte por mucho que haga decode y no entiendo porque pasa esto. Probe lo mismo en otro archivo y si me funciona. Captura de pantalla 2024-11-20 010849 Captura de pantalla 2024-11-20 010908

De todas maneras hice un commit con mi codigo por si es util. Muchas gracias

3rdPix commented 5 days ago

Hola @MTGG123 !

No logro replicar el error que estás teniendo:

image

¿Quizás la versión de python con que pruebas los archivos es distinta entre sí?

MTGG123 commented 5 days ago

Hola @MTGG123 !

No logro replicar el error que estás teniendo:

image

¿Quizás la versión de python con que pruebas los archivos es distinta entre sí?

Perdón, la versión de mi código no era la correcta, ahora si debería estar bien. De todas maneras, lo que hace el código simplemente es imprimir el diccionario donde están los datos y ahí se puede ver que los datos siguen como un byte (como sale en la primera imagen)

MTGG123 commented 5 days ago

Revisando bien el código, pareciera que decode esta tomando los \x00 como espacios y no como un str vacío, por lo que al comparar el byte decodificado con el str original, estos no son iguales. Extrañamente usar strip() tampoco funciona Captura de pantalla 2024-11-20 133624 Captura de pantalla 2024-11-20 133654 Captura de pantalla 2024-11-20 133712

3rdPix commented 5 days ago

Te recomiendo utilizar el largo del mensaje para solucionar esto. Dado que tu conoces el largo del mensaje, puedes ir construyendo el mensaje hasta que logres completar el largo; a partir de ahí, sabrás que si hay bytes extras en el último chunk que recibiste, estos serán relleno de ceros.

Si tengo un mensaje de largo 33:

Esta forma de abordarlo te permitiría descartar los bytes vacíos... me cuéntas si te sirve o si tienes otra duda.

MTGG123 commented 5 days ago

Te recomiendo utilizar el largo del mensaje para solucionar esto. Dado que tu conoces el largo del mensaje, puedes ir construyendo el mensaje hasta que logres completar el largo; a partir de ahí, sabrás que si hay bytes extras en el último chunk que recibiste, estos serán relleno de ceros.

Si tengo un mensaje de largo 33:

  • Tomo los primeros 32 bytes del chunk 0.
  • Tomo el primer byte del chunk 1 -> completando el largo de 33
  • Sé que los bytes desde chunk_1[1:] serán ceros de relleno, y no lo paso a través del encoder.

Esta forma de abordarlo te permitiría descartar los bytes vacíos... me cuéntas si te sirve o si tienes otra duda.

Me funcionó, muchas gracias :)