Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: DeMoNcRaZy en 6 Septiembre 2015, 21:25 pm



Título: [C#] Como funciona Byte y Encoding
Publicado por: DeMoNcRaZy en 6 Septiembre 2015, 21:25 pm
Buenas,

Tengo una duda con definición de variables.

Tengo esto:

Código
  1. byte[] raw = wc.DownloadData(laUrl);

Y funciona correctamente.

Sin embargo intento ponerlo así:

Código
  1. string raw = wc.DownloadData(laUrl);

Y me subraya la definición de la variable. ¿Qué diferencia hay entre esas dos variables?

He visto que son los sockets también en transmite de mensajes se hace mediante byte[] ¿por qué?


¿Y esta función exactamente que realiza?

Código
  1. string webData = System.Text.Encoding.UTF8.GetString(raw);

Parece que se codifica... ¿por qué?

Cualquier información adicional la agradecería.
Gracias.

Saludos.


Título: Re: [C#] Como funciona Byte y Encoding
Publicado por: Eleкtro en 6 Septiembre 2015, 22:23 pm
Tengo esto:

Código
  1. byte[] raw = wc.DownloadData(laUrl);

Y funciona correctamente.

Sin embargo intento ponerlo así:

Código
  1. string raw = wc.DownloadData(laUrl);

Y me subraya la definición de la variable. ¿Qué diferencia hay entre esas dos variables?

Byte y String son dos types diferentes, además, la primera variable es un Array de Bytes.

Para que la segunda orden te funcionase, deberías utilizar la función WebClient.DownloadString, aunque imagino que eso no es lo que pretendes hacer realmente.
WebClient.DownloadString Method - MSDN (http://msdn.microsoft.com/en-us/library/system.net.webclient.downloadstring%28v=vs.110%29.aspx)

No entiendo muy bien cual es tu duda respecto a eso, ya que se ve claramente que son dos tipos diferentes, pues no es lo mismo un byte que una cadena de texto, aunque esta consista en bytes de datos (concretamente un buffer de 1 byte por cada caracter ANSI o 2 bytes por cada caracter Unicode).



¿Y esta función exactamente que realiza?

Código
  1. string webData = System.Text.Encoding.UTF8.GetString(raw);

Parece que se codifica... ¿por qué?

Al contrario, se descodifica.

Teniendo un array de bytes (que supuestamente contengan caracteres UTF-8), dicha función decodifica los bytes para representarlos en una cadena de texto usando dicha codificación de texto, UTF-8.

Cuando no estés seguro del propósito de un método, función, o cualquier otro tipo demiembro, es tan simple como que pases el puntero del mouse por encima del nombre del método en la IDE de Visual Studio... de esta manera IntelliSense te informará de todos los detalles incluyendo sus parámetros y no tendrás que preguntar "¿qué hace esto?" o "¿cómo se usa?".
También puedes usar el Object Inspector en la IDE, o recurrir a la referencia online (u offline) de la MSDN:
Encoding.GetString Method (Byte()) - MSDN (http://msdn.microsoft.com/en-us/library/744y86tc%28v=vs.110%29.aspx)



He visto que son los sockets también en transmite de mensajes se hace mediante byte[] ¿por qué?

Por qué los paquetes que se transmiten contienen eso, una serie de bytes, que luego debes interpretar/descifrar.

Saludos


Título: Re: [C#] Como funciona Byte y Encoding
Publicado por: DeMoNcRaZy en 7 Septiembre 2015, 11:56 am
Gracias por la respuesta, todo muy razonable.

En MSDN pone lo siguiente:
Código:
Cuando se reemplaza en una clase derivada, descodifica todos los bytes de la matriz de bytes especificada en una cadena.

Esto significa que byte[] me codifica dicho mensaje (respuesta)

Código
  1. byte[] raw = wc.DownloadData(laUrl);

Y luego me lo decodifica:

Código
  1. string webData = System.Text.Encoding.UTF8.GetString(raw);

Si mal no entendí, ¿funciona ciertamente así? (Corrígeme si me equivoco)
Gracias.

Saludos.


Título: Re: [C#] Como funciona Byte y Encoding
Publicado por: Eleкtro en 8 Septiembre 2015, 01:18 am
Si mal no entendí, ¿funciona ciertamente así? (Corrígeme si me equivoco)

hmmm... se podría decir que si.

Te lo intentaré explicar de otra forma por si acaso lo entiendes mejor...

Cita de: MSDN
WebClient.DownloadData: Downloads the resource as a Byte array from the URI specified

La función DownloadData descarga "X" y te entrega ese "X" acomodado en un Array de bytes.

¿Qué contiene el Array?, podría ser los bytes que componen ua imagen Bitmap, o un archivo de música, o un string UTF-8 ...cómo supuestamente es en este caso.

Tu tienes unos bytes que sabes que se pueden interpretar en un string legible, y sabes que el string tiene codificación UTF-8, así que usas la función Encoding.UTF8.Getstring para decodificar el contenido, si usases codificación ASCII o UTF32 etc se verian caracteres ilegibles.

Un ejemplo real-world:

Código
  1. WebClient wc = new WebClient();
  2. UTF8Encoding enc = new UTF8Encoding();
  3. byte[] data = wc.DownloadData("http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt");
  4. string str = enc.GetString(data);
  5.  
  6. File.WriteAllText("c:\\utf8.txt", str, enc);

Saludos


Título: Re: [C#] Como funciona Byte y Encoding
Publicado por: DeMoNcRaZy en 8 Septiembre 2015, 18:22 pm
Gracias por la respuestas.
Ya más o menos entiendo su funcionamiento de igual modo lo pondré en practica.
En el MSDN también vi su manejo.

Saludos.