Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Meta en 18 Enero 2023, 07:25 am



Título: El código de enviar en consola de más de 255 caracteres me sale error.
Publicado por: Meta en 18 Enero 2023, 07:25 am
Hola:

Usando C++ CLR o .net me sale este error.

Citar
Gravedad    Código    Descripción    Proyecto    Archivo    Línea    Estado suprimido
Error (activo)    E0144    no se puede usar un valor de tipo "cli::array<wchar_t, 1> ^" para inicializar una entidad de tipo "cli::array<char, 1> ^"    Chat Consola CLR    D:\Visual Studio 2022\Chat Consola CLR\Chat Consola CLR\Chat Consola CLR.cpp    144   


Código
  1.        Stream^ entradaDeDatos = Console::OpenStandardInput();
  2.        array<Byte> ^buffer = gcnew array<Byte>(MAXIMA_LONGITUD);
  3.        int numerosBytesLeidos = entradaDeDatos->Read(buffer, 0, MAXIMA_LONGITUD);
  4.        array<char> ^chars = Console::InputEncoding->GetChars(buffer, 0, numerosBytesLeidos);
  5.        mensaje = gcnew String(chars);

¿Alguna idea?

Saludos.


Título: Re: El código de enviar en consola de más de 255 caracteres me sale error.
Publicado por: kub0x en 18 Enero 2023, 16:51 pm
En C++ unsigned char equivale a 8 bits, un byte de toda la vida desde 0-255. Si es signed char de -127-127.
En cambio wchar_t, WCHAR equivale a un Wide char lo que son 16 bits para formato UTF-16. Convertir wchar_t a char puede ser catastrofico dependiendo del encoding.
Por lo que deberás de analizar si en algún momento encontrarás caracteres fuera de ASCII.

Citar
Error (activo)    E0144    no se puede usar un valor de tipo "cli::array<wchar_t, 1> ^" para inicializar una entidad de tipo "cli::array<char, 1> ^" 

El error te está diciendo que es imposible usar el buffer que es un array de wchar_t para inicializar ^chars que es un array de tipo char. Está claro jeje

Saludos.


Título: Re: El código de enviar en consola de más de 255 caracteres me sale error.
Publicado por: Meta en 18 Enero 2023, 20:10 pm
Hola:

Ya funciona. Puse esto.

Código
  1. array<wchar_t> ^chars = Console::InputEncoding->GetChars(buffer, 0, numerosBytesLeidos);

Muchísimas gracias mi muy distinguido amigo.

Que tengas buen año. ;)