Mal comportamiento con ASCII, que alguien me lo explique!

Started by alicesimu, October 26, 2016, 10:50:11 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

alicesimu

Buenas a todos

no se si es un mal comportamiento del propia version Pixtudio o que

pero creo NO entender la logica del codigo que devuelve la variable ascii

se supone que el numero que debe devolver debe ser de la tabla ASCII como en esta web.
http://www.elcodigoascii.com.ar/

Debe ser así: ejemplos
valor ascii = tecla [simbolo]
32 = espacio [ ]
97 = letra a [a]
165 = letra Ñ [Ñ]


pero no logo imprimir en texto el codigo ascii equivalente.
tengo este codigo de ejemplo... pero quiero convertir el valor ascii a texto(string) equivalente.
http://wiki.bennugd.org/index.php?title=Ascii

import "mod_text"
import "mod_key"
import "mod_video"
import "mod_wm"
import "mod_string"

process main()
private
string text;

begin
    set_mode(640,320);

    write( 0, 60, 10, 0, "Use lower and upper case characters to see the difference");
    write( 0, 60, 20, 0, "between ascii and scan_code.    (ESC to exit)  ");

    write_string( 0, 60, 40, 0,&text);
    write_var( 0, 110, 40, 0, ascii);

    write( 0, 26, 50, 0, "scan_code: ");
    write_var( 0, 110, 50, 0, scan_code);
write_var( 0, 110, 60, 0,shift_status);

repeat
text="ascii: "+chr(scan_code);

        frame;
    until(key(_esc) or exit_status);
end


use el Chr()
http://wiki.bennugd.org/index.php?title=Chr
para convertir ese valor ascii a caracter textual equivalente.
en cambio la funcion: chr si funciona bien.

ejemplo: chr(165) = Ñ

pero no funciona ascii, me da simbolos raros por que el numero que devuelve ascii NO ES CORRECTO

Adjunto 2 capturas:
Captura_001 = pulsando la tecla 1
Captura_002 = pulsando la tecla espacio



panreyes


Drumpi

¿Y por qué haces chr(scan_code) en lugar de chr(ascii), que es el que te da el valor ascii de la letra que pulsas (incluido si es mayúscula, si está acentuada, etc...)?
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

DCelso

ASCII solo son los 128 primeros caracteres, no está la ñ. y siempre son los mismos.

"Ascii extendido" son los 128 restantes y son donde están el problema, en cada región fueron creando los suyos y hay un lio de cojones liado con eso. MSDOS usaba CP850 en cambio windows en el oeste de europa usaba el CP1252", luego cambió  a ISO-8859-1

y actualmente todos los sistemas operativos tienden a usar utf-8, que usa esos 128 caracteres últimos para poder mapear todos los que existían hasta entonces, por tanto con codificación utf-8 puedes escribir cualquier caracter conocido hasta ahora. ya que es de longitud variable. Es decir, hasta el momento todos los caracteres se codificaban con solo 8 bits, con utf8 un caracter puede ocupar más de 8, (siempre múltiplos de éste por eso lo del 8 de su nombre)

Dicho esto. bennu (y fenix), en fnt, tiene solo emulado cp850, si pones eso hace un mapeo para corresponder con esa codificación. si pones cualquier otro valor, no hace mapeo alguno y deja pasar cualquier codificación que crees. Es por eso que fnt maker por defecto no usa cp850.

Lo único seguro hasta hoy son los 127 primeros caracteres que siempre han permanecido inalterados. :D, para el resto hay que estar siempre con prueba de "codepage" :D




Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

alicesimu

Quote from: Drumpi on October 26, 2016, 06:04:35 PM
¿Y por qué haces chr(scan_code) en lugar de chr(ascii), que es el que te da el valor ascii de la letra que pulsas (incluido si es mayúscula, si está acentuada, etc...)?

chr(ascii) ??? no se me ocurrio...
lo probare.

Quote from: DCelso on October 26, 2016, 06:28:40 PM
ASCII solo son los 128 primeros caracteres, no está la ñ. y siempre son los mismos.

"Ascii extendido" son los 128 restantes y son donde están el problema, en cada región fueron creando los suyos y hay un lio de cojones liado con eso. MSDOS usaba CP850 en cambio windows en el oeste de europa usaba el CP1252", luego cambió  a ISO-8859-1

y actualmente todos los sistemas operativos tienden a usar utf-8, que usa esos 128 caracteres últimos para poder mapear todos los que existían hasta entonces, por tanto con codificación utf-8 puedes escribir cualquier caracter conocido hasta ahora. ya que es de longitud variable. Es decir, hasta el momento todos los caracteres se codificaban con solo 8 bits, con utf8 un caracter puede ocupar más de 8, (siempre múltiplos de éste por eso lo del 8 de su nombre)

Dicho esto. bennu (y fenix), en fnt, tiene solo emulado cp850, si pones eso hace un mapeo para corresponder con esa codificación. si pones cualquier otro valor, no hace mapeo alguno y deja pasar cualquier codificación que crees. Es por eso que fnt maker por defecto no usa cp850.

Lo único seguro hasta hoy son los 127 primeros caracteres que siempre han permanecido inalterados. :D, para el resto hay que estar siempre con prueba de "codepage" :D


El que yo usaria es el charset del Sistema BennuGD usa por defecto, en las FNT generadas abria que selecionar ese charset.

Por eso abri un topic en la mesa de ayuda con para el momento que Genere FNT y no liarla y creerme que es un bug.

juraria que el Div2, es el viejo charset.

alicesimu

Quote from: Drumpi on October 26, 2016, 06:04:35 PM
¿Y por qué haces chr(scan_code) en lugar de chr(ascii), que es el que te da el valor ascii de la letra que pulsas (incluido si es mayúscula, si está acentuada, etc...)?

pues no es eso.

chr no funciona mal, es el valor ASCII que esta mal....

chr se mira el valor de la tabla ASCII tradicional.

ahora bien la variable que me devulver ASCII no cuencide en la tabla ASCII

alicesimu

finalmente tiene futura solución? si se lo miraran...  :'( :'( :'(

para mi esa variable me sirve para que el usuario pueda escribir su nombre de jugador, por ejemplo.
si no mi proyecto carecerá de que el usuario ponga el nombre del personaje.

scan_code si funciona como debe ser.

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

scan_code funciona como deberia funcionar...

la variable que vos estas necesitando se llama "ASCII"
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

process main()
private
string text;

begin
    set_mode(640,320);

    write( 0, 60, 10, 0, "Use lower and upper case characters to see the difference");
    write( 0, 60, 20, 0, "between ascii and scan_code.    (ESC to exit)  ");

    write_string( 0, 60, 40, 0, &text);
    write_var( 0, 210, 40, 0, ascii);

    write( 0, 26, 50, 0, "scan_code: ");
    write_var( 0, 110, 50, 0, scan_code);
    write_var( 0, 110, 60, 0, shift_status);

    repeat
                if ( ascii )
                        text="ascii: "+chr(ascii);
                end
        frame;
    until(key(_esc) or exit_status);
end
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

scan_code no tiene que ver con la representacion/codificacion del caracter que sale tras la pulsacion de la tecla, scan_code es el identificador a nivel hardware de la tecla, digamos, el id de la tecla.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

alicesimu

solo digo que ASCII no funciona bien, da unos valores que no corresponden a la tabla ASCII.

Se que scan_code no tiene nada que ver con la tabla ascii, pero se que da los valores correctos a las posiciones de las teclas fisicas del teclado.

SplinterGU

Quote from: alicesimu on October 27, 2016, 06:17:04 AM
solo digo que ASCII no funciona bien, da unos valores que no corresponden a la tabla ASCII.

Se que scan_code no tiene nada que ver con la tabla ascii, pero se que da los valores correctos a las posiciones de las teclas fisicas del teclado.

tenes mas el codigo que estas probando...


text="ascii: "+chr(scan_code);

a mi me funciona de maravillas, por favor, prueba el codigo que puse yo
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

Quote from: DCelso on October 26, 2016, 06:28:40 PM
ASCII solo son los 128 primeros caracteres, no está la ñ. y siempre son los mismos.

"Ascii extendido" son los 128 restantes y son donde están el problema, en cada región fueron creando los suyos y hay un lio de cojones liado con eso. MSDOS usaba CP850 en cambio windows en el oeste de europa usaba el CP1252", luego cambió  a ISO-8859-1

y actualmente todos los sistemas operativos tienden a usar utf-8, que usa esos 128 caracteres últimos para poder mapear todos los que existían hasta entonces, por tanto con codificación utf-8 puedes escribir cualquier caracter conocido hasta ahora. ya que es de longitud variable. Es decir, hasta el momento todos los caracteres se codificaban con solo 8 bits, con utf8 un caracter puede ocupar más de 8, (siempre múltiplos de éste por eso lo del 8 de su nombre)

Dicho esto. bennu (y fenix), en fnt, tiene solo emulado cp850, si pones eso hace un mapeo para corresponder con esa codificación. si pones cualquier otro valor, no hace mapeo alguno y deja pasar cualquier codificación que crees. Es por eso que fnt maker por defecto no usa cp850.

Lo único seguro hasta hoy son los 127 primeros caracteres que siempre han permanecido inalterados. :D, para el resto hay que estar siempre con prueba de "codepage" :D






estas equivocado, si sale la ñ con ascii...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

Error.
eres tú el que estás equivocado.

https://es.wikipedia.org/wiki/ASCII



A no ser que tu llames ASCII al ASCII extendido ...

Ah bueno, tu te refieres a la variable bennuGD. ok, ok. Asín, sí.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/