elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Error en este código: no se puede convertir de 'byte[]' a 'char[]'
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error en este código: no se puede convertir de 'byte[]' a 'char[]'  (Leído 3,598 veces)
Meta


Desconectado Desconectado

Mensajes: 3.439



Ver Perfil WWW
Error en este código: no se puede convertir de 'byte[]' a 'char[]'
« en: 27 Diciembre 2023, 07:06 am »

Hola:

Tengo este código y me salta este error. Supuestamente es todo a byte[], nada de char[].

Código
  1. using System;
  2. using System.Text;
  3.  
  4. namespace Almacenar_datos_en_un_array_tipo_byte_Consola_01
  5. {
  6.    internal class Program
  7.    {
  8.        static void Main(string[] args)
  9.        {
  10.            byte[] dataArray = new byte[1024]; // Tamaño máximo del array de bytes.
  11.  
  12.            Console.WriteLine("Escribe un texto y pulsa Enter:");
  13.            int bytesRead = Console.In.Read(dataArray, 0, dataArray.Length); // Lee los bytes desde la consola y los guarda en el array.
  14.  
  15.            Console.WriteLine("Datos almacenados en el array:");
  16.            for (int i = 0; i < bytesRead; i++)
  17.            {
  18.                Console.Write(dataArray[i] + " ");
  19.            }
  20.            Console.WriteLine();
  21.  
  22.            Console.WriteLine("Texto almacenado en el array:");
  23.            string text = Encoding.Default.GetString(dataArray, 0, bytesRead); // Convierte los bytes a una cadena de texto.
  24.            Console.WriteLine(text);
  25.        }
  26.    }
  27. }

Justo aquí.
Código
  1. int bytesRead = Console.In.Read(dataArray, 0, dataArray.Length); // Lee los bytes desde la consola y los guarda en el array.

En el primer dataArray.


En línea

profinet

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Re: Error en este código: no se puede convertir de 'byte[]' a 'char[]'
« Respuesta #1 en: 27 Diciembre 2023, 10:08 am »

En C#, el tipo de dato char tiene un tamaño de 16 bits, lo que le permite representar cualquier carácter Unicode. Por otro lado, el tipo de dato byte tiene un tamaño de 8 bits.
Es posible que haya cierta confusión, ya que en lenguajes como C/C++, ambos tipos de datos comparten el mismo tamaño, ya que el tipo char se utiliza para representar caracteres ASCII, que son de 8 bits en esos contextos.
Sin embargo, en el entorno de C#, el tipo char se ha diseñado para manejar un rango más amplio de caracteres Unicode, y por lo tanto, su tamaño es de 16 bits.

Si quieres rizar el rizo, debes guardar la entrada del usuario como un string (una cadena de caracteres con terminador nulo), codificarlos en UTF8 (8-bit Unicode Transformation Format) y volver a descodificarlos.

Código
  1. using System;
  2. using System.Text;
  3.  
  4. internal class Program {
  5.    static void Main(string[] args) {
  6.        Console.WriteLine("Escribe un texto y pulsa Enter:");
  7.        string inputText = Console.ReadLine(); // Lee una línea de texto desde la consola.
  8.        byte[] byteArray = Encoding.UTF8.GetBytes(inputText); // Convierte el texto a un byte[] usando UTF-8.
  9.  
  10.        Console.WriteLine("Datos almacenados en el array:");
  11.        foreach (byte b in byteArray) {
  12.            Console.WriteLine(b);
  13.        }
  14.        Console.WriteLine();
  15.  
  16.        Console.WriteLine("Texto almacenado en el array:");
  17.        string text = Encoding.UTF8.GetString(byteArray); // Convierte los bytes a una cadena de texto.
  18.        Console.WriteLine(text);
  19.    }
  20. }
  21.  

Código:
Escribe un texto y pulsa Enter:
hola
Datos almacenados en el array:
104
111
108
97

Texto almacenado en el array:
hola
   


En línea

Don't shy away from the terminal; embrace it! In the GNU world, everything is a file.
Meta


Desconectado Desconectado

Mensajes: 3.439



Ver Perfil WWW
Re: Error en este código: no se puede convertir de 'byte[]' a 'char[]'
« Respuesta #2 en: 27 Diciembre 2023, 16:45 pm »

En string no lo prefiero, porque ahora prefiero hacer pruebas directamente en un array, ya que los datos me vienen directamente del puerto serie y debo capturar todo tipo de datos en Bytes, incluyendo /r y /n por poner un ejemplo.

Aún así cuando llegue a mi casa pruebo tu código y muchas gracias.

Luego te comento.
En línea

Meta


Desconectado Desconectado

Mensajes: 3.439



Ver Perfil WWW
Re: Error en este código: no se puede convertir de 'byte[]' a 'char[]'
« Respuesta #3 en: 29 Diciembre 2023, 03:50 am »

Lo intenté hacer de esta otra forma.

Código
  1. using System;
  2. using System.Text;
  3.  
  4. namespace Almacenar_datos_en_un_array_tipo_byte_Consola_01
  5. {
  6.    internal class Program
  7.    {
  8.        static void Main(string[] args)
  9.        {
  10.  
  11.            // Tamaño máximo del array de bytes.
  12.            byte[] byteArray = new byte[1024];
  13.  
  14.            // Convertir de byte[] a char[]
  15.            char[] charArray  = Encoding.Default.GetString(byteArray).ToCharArray();
  16.  
  17.            Console.WriteLine("Escribe un texto y pulsa Enter:");
  18.  
  19.            // Lee los bytes desde la consola y los guarda en el array.
  20.            int leerBytes = Console.In.Read(charArray, 0, charArray.Length);
  21.  
  22.            Console.WriteLine("Datos almacenados en el array:");
  23.            for (int i = 0; i < leerBytes; i++)
  24.            {
  25.                Console.Write(byteArray[i] + " ");
  26.            }
  27.            Console.WriteLine();
  28.  
  29.            Console.WriteLine("Texto almacenado en el array:");
  30.  
  31.            // Convierte los bytes a una cadena de texto.
  32.            string texto = Encoding.Default.GetString(byteArray, 0, leerBytes);
  33.            Console.WriteLine(texto);
  34.  
  35.            // Pulse cualquier tecla para salir.
  36.            Console.ReadKey();
  37.        }
  38.    }
  39. }

Me lee todo como ceros.
En línea

profinet

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Re: Error en este código: no se puede convertir de 'byte[]' a 'char[]'
« Respuesta #4 en: 29 Diciembre 2023, 09:01 am »

Si quieres leer raw bytes desde la consola, necesitas usar Console.OpenStandardInput().

Código
  1. using System;
  2. namespace Almacenar_datos_en_un_array_tipo_byte_Consola_01 {
  3.    internal class Program {
  4.        static void Main(string[] args) {
  5.            // Tamaño máximo del array de bytes.
  6.            byte[] byteArray = new byte[1024];
  7.  
  8.            Console.WriteLine("Escribe un texto y pulsa Enter:");
  9.  
  10.            // Lee los bytes desde la consola y los guarda en el array.
  11.            int leerBytes = Console.OpenStandardInput().Read(byteArray, 0, byteArray.Length);
  12.  
  13.            Console.WriteLine("Datos almacenados en el array:");
  14.            for (int i = 0; i < leerBytes; i++) {
  15.                Console.Write(byteArray[i] + " ");
  16.            }
  17.            Console.WriteLine();
  18.  
  19.            Console.WriteLine("Texto almacenado en el array:");
  20.  
  21.            // Convierte los bytes a una cadena de texto.
  22.            string texto = System.Text.Encoding.Default.GetString(byteArray, 0, leerBytes);
  23.            Console.WriteLine(texto);
  24.  
  25.            // Pulse cualquier tecla para salir.
  26.            Console.ReadKey();
  27.        }
  28.    }
  29. }
  30.  

Código:
Escribe un texto y pulsa Enter:
hola
Datos almacenados en el array:
104 111 108 97 13 10
Texto almacenado en el array:
hola

Si planeas leer datos directamente desde el puerto serie en C#, será necesario trabajar con un flujo de entrada/salida (I/O stream).
Afortunadamente, la clase SerialPort en C# proporciona métodos predefinidos para manejar la lectura y escritura de datos en un puerto serie.

De todos modos, un string no deja de ser una cadenas de caracteres, y cada caracter, pese a ocupar 16 bits, almacena un byte (o doble byte) que dependiendo del tipo de codificación, se imprime en pantalla. Por ejemplo, usando la tabla ASCII si la codificación es UTF8: https://elcodigoascii.com.ar/

En caso de que lo que leas, no tenga un símbolo gráfico relacionado, se imprime un carácter residual. En este contexto, es crucial destacar que el "byte" en sí mismo continuará almacenado en el carácter correspondiente. La distinción recae en el enfoque que aplicas a la manipulación de los datos.
En línea

Don't shy away from the terminal; embrace it! In the GNU world, everything is a file.
Meta


Desconectado Desconectado

Mensajes: 3.439



Ver Perfil WWW
Re: Error en este código: no se puede convertir de 'byte[]' a 'char[]'
« Respuesta #5 en: 29 Diciembre 2023, 18:20 pm »

Funciona tu código.   ;-)
Estás hecho un campeón. Gracias a todos.  ;D ;D ;D ;-)

El primer código funciona si pongo en vez de byte[] ponerlo a char[], cosa que no me interesa. El tuyo es el que quiero.

Y si, estoy aprendiendo con ejemplos sueltos antes de meterle mano al puerto serie.

Felices fiestas 2023.  :D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Variable Char a BYTE « 1 2 »
Programación C/C++
bwsr 12 6,177 Último mensaje 23 Febrero 2013, 20:04 pm
por bwsr
Una mano con este codigo. (array de byte dinamico)
.NET (C#, VB.NET, ASP)
70N1 4 2,952 Último mensaje 23 Septiembre 2014, 13:37 pm
por Eleкtro
MOVIDO: Una mano con este codigo. (array de byte dinamico)
Programación C/C++
Eternal Idol 0 2,087 Último mensaje 12 Septiembre 2014, 14:11 pm
por Eternal Idol
ayuda paso de byte* a char* « 1 2 3 »
Programación C/C++
Kaxperday 21 7,293 Último mensaje 27 Junio 2015, 03:22 am
por Kaxperday
¿ Cómo funciona este código que pasa de char a int ?
Programación C/C++
snake_linux 2 3,802 Último mensaje 27 Agosto 2015, 10:23 am
por snake_linux
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines