Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   .NET (https://www.clubdelphi.com/foros/forumdisplay.php?f=17)
-   -   Error en este código: no se puede convertir de 'byte[]' a 'char[]' (https://www.clubdelphi.com/foros/showthread.php?t=96550)

REHome 28-12-2023 18:34:54

Error en este código: no se puede convertir de 'byte[]' a 'char[]'
 
Hola:

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

Código:

using System;
using System.Text;

namespace Almacenar_datos_en_un_array_tipo_byte_Consola_01
{
    internal class Program
    {
        static void Main(string[] args)
        {
            byte[] dataArray = new byte[1024]; // Tamaño máximo del array de bytes.

            Console.WriteLine("Escribe un texto y pulsa Enter:");
            int bytesRead = Console.In.Read(dataArray, 0, dataArray.Length); // Lee los bytes desde la consola y los guarda en el array.

            Console.WriteLine("Datos almacenados en el array:");
            for (int i = 0; i < bytesRead; i++)
            {
                Console.Write(dataArray[i] + " ");
            }
            Console.WriteLine();

            Console.WriteLine("Texto almacenado en el array:");
            string text = Encoding.Default.GetString(dataArray, 0, bytesRead); // Convierte los bytes a una cadena de texto.
            Console.WriteLine(text);
        }
    }
}

Justo aquí.
Código:

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.

delphi.com.ar 28-12-2023 21:57:24

Simplemente el método Read espera un array de caracteres (char[]), y le estas pasando un array de bytes (bytes[]). Tienes que cambiar la definición de dataArray o convertirla a char[].

Saludos.

REHome 29-12-2023 03:45:56

¿Y no se puede hacer de alguna manera solo byte[] en vez de char[]?

Aún así intenté hacer esto. Me ejecuta pero el resultado no me da nada, solo ceros.

Código:

using System;
using System.Text;

namespace Almacenar_datos_en_un_array_tipo_byte_Consola_01
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // Tamaño máximo del array de bytes.
            byte[] byteArray = new byte[1024];

            // Convertir de byte[] a char[]
            char[] charArray  = Encoding.Default.GetString(byteArray).ToCharArray();

            Console.WriteLine("Escribe un texto y pulsa Enter:");

            // Lee los bytes desde la consola y los guarda en el array.
            int leerBytes = Console.In.Read(charArray, 0, charArray.Length);

            Console.WriteLine("Datos almacenados en el array:");
            for (int i = 0; i < leerBytes; i++)
            {
                Console.Write(byteArray[i] + " ");
            }
            Console.WriteLine();

            Console.WriteLine("Texto almacenado en el array:");

            // Convierte los bytes a una cadena de texto.
            string texto = Encoding.Default.GetString(byteArray, 0, leerBytes);
            Console.WriteLine(texto);

            // Pulse cualquier tecla para salir.
            Console.ReadKey();
        }
    }
}


delphi.com.ar 29-12-2023 15:04:39

Como te respondieron en el otro foro:
Cita:

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.
Siempre tienes la chance de convertir un tipo de dato al otro, por ejemplo leer la entrada de la consola como string, y convertirla a byte[]. En tu código, lees la variable charArray para no usarla nunca, y el byteArray queada con la definición original, no es alterada.

Saludos.


La franja horaria es GMT +2. Ahora son las 20:03:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi