Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: jonyloscalzo en 15 Octubre 2013, 05:51 am



Título: Unicode en argv
Publicado por: jonyloscalzo en 15 Octubre 2013, 05:51 am
Gente! Tengo una consulta

En la facultad quieren que hagamos un programa que lea desde los argumentos del main ciertos parámetros y realice alguna operación según la letra.
Venia todo bien porque los parámetros eran f,v,c,o,w

Ahora me agregaron el parametro omega. (ganas de molestar que tienen).
Pero no dieron ningún indicio de nada, y por lo visto, no los van a dar.
Por lo que leí, omega está dentro de unicode, lo cual es mi duda :


Saqué algo de aquí y por lo visto es wint_t o wchar_t

http://pubs.opengroup.org/onlinepubs/7908799/xsh/wchar.h.html (http://pubs.opengroup.org/onlinepubs/7908799/xsh/wchar.h.html)


¿Que librería debo importar y que tipo debo usar? :P  ¿En los argumentos del main debo poner el nuevo tipo? ¿Las funciones que manipulaban el argv dejaron de funcionar? (por ejemplo isdigit())

Nos dijeron que podemos utilizar cualquier librería de glibc.

Se agradece cualquier ayuda!!!!


Título: Re: Unicode en argv
Publicado por: x64core en 16 Octubre 2013, 18:49 pm
Supongo que es para consola?
Porque no simplemente se cambia la declaracion del punto de entrada


Título: Re: Unicode en argv
Publicado por: jonyloscalzo en 24 Octubre 2013, 14:21 pm
El programita esté lee una seríe de parametros por consola y uno de ellos es Ω.
Yo lo solucioné asi. Como unicode se compone de varios bytes, Ω correspondia a 2 valores (no recuerdo cuales) en particular. Luego pregunte si el primero y el segundo eran esos valores y anduvo... Pero nose si esto funciona para otras consolas o maquinas...


Título: Re: Unicode en argv
Publicado por: eferion en 24 Octubre 2013, 17:19 pm
Cuando tu en el main te encuentras con

Código
  1. int main( int argc, char** argv )

char** representa, efectivamente, el array de parámetros... lo que sucede es que el tipo utilizado, char, ocupa 1 byte.

La codificación básica, ASCII, tiene 255 caracteres ( el 0 no lo cuento ), que son los que se pueden representar con 1 byte.

Codificaciones más completas, con caracteres regionales y demás, utilizan otras tablas más grandes y que, por tanto, van a necesitar de más bytes para representar un caracter.

Casualidad o no, cada uno que piense lo que quiera, los primeros 255 valores de las tablas ANSII y UTF-8 son idénticos y se corresponden a la ya conocida tabla ASCII. Esto permite imprimir los caracteres básicos por pantalla independientemente de la codificación elegida.

El problema es que cuando el caracter a leer / imprimir no se corresponde con los indicados en la tabla ASCII. En este caso hay que conocer cual es la codificación que va a usar nuestro dispositivo de salida. Esto nos va a permitir conocer la codificación correcta de todos y cada uno de los caracteres que nos interesan.

La codificación empleada por el dispositivo de salida se puede cambiar para adaptarla a las necesidades, pero eso ya es otra historia.