Caractère inconnu?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
jph
Messages : 68
Inscription : dim. 17/juil./2022 16:02

Caractère inconnu?

Message par jph »

Bonjour. J'ai un petit bout de code qui est censé me renvoyer la valeur Ascii d'un caractère pris dans un Editor. Je vous le mets ici:

Code : Tout sélectionner

Procedure MyEventGadget_Button_0()
  
  Select EventType()
    Case #PB_EventType_LeftClick
      *addr_texte = Ascii(GetGadgetText(#Editor_0))
      ;valeur_decimale_caractere.u = PeekU(*addr_texte)
      valeur_decimale_caractere.b = PeekB(*addr_texte)
      ;valeur_decimale_caractere.a = Ascii(GetGadgetText(#Editor_0))
      SetGadgetText(#Editor_0_Copy1, Str(valeur_decimale_caractere))
      FreeMemory(*addr_texte)

  EndSelect
  
EndProcedure
Le problème, c'est que cette procédure me renvoie la valeur 0 lorsque je demande la valeur du caractère ’ . Je précise que ce n'est ni ' ni ` qui eux me renvoient une valeur.

Est-ce que vous savez quel est ce caractère? Est-ce que c'est un caractère qui n'est pas Ascii? Unicode par exemple? Et dans ce cas, comment obtenir la valeur unicode d'un caractère, vu que la fonction Ascii() ne renvoie que des valeurs entre 0 et 255? Merci d'avance.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Caractère inconnu?

Message par falsam »

J'espére que je répond à ta question

Code : Tout sélectionner

Define dummy.s = "’"
Define *Resultat = Ascii(dummy)
Debug PeekS(*Resultat, -1, #PB_Ascii)
FreeMemory(*Resultat)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
jph
Messages : 68
Inscription : dim. 17/juil./2022 16:02

Re: Caractère inconnu?

Message par jph »

falsam a écrit : lun. 27/févr./2023 0:04 J'espére que je répond à ta question
Merci d'avoir pris le temps de me répondre. Mais en fait, ça ne marche pas. La fenêtre de debug s'ouvre mais n'affiche rien, ni chiffre ni caractère. Voilà. Ça provient peut-être de ma configuration?
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Caractère inconnu?

Message par falsam »

Zoom dans la fenêtre de debug avec la molette de la souris pour voir si il apparait ...
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
jph
Messages : 68
Inscription : dim. 17/juil./2022 16:02

Re: Caractère inconnu?

Message par jph »

Non, rien n’apparaît. J'ai remplacé par

Code : Tout sélectionner

 Debug "coucou " + PeekS(*Resultat, -1, #PB_Ascii) 
Et le cocucou apparaît bien mais pas mon caractère ni sa valeur. Ça marche chez toi?
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Caractère inconnu?

Message par falsam »

Chez moi pas de souci. Ton caractère apparait bien dans la fenêtre de debug
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
jph
Messages : 68
Inscription : dim. 17/juil./2022 16:02

Re: Caractère inconnu?

Message par jph »

Ok. Je suis sous Linux. Tout à l'heure j'essayerai sous Windows pour voir. Je te dirai. Merci d'avoir fait le test. A+
jph
Messages : 68
Inscription : dim. 17/juil./2022 16:02

Re: Caractère inconnu?

Message par jph »

Sous Windows ça marche. Mon caractère apparaît dans la fenêtre Debug et mon programme me donne la valeur -110 pour ce caractère, alors que sous Linux j'ai la valeur 0 et pas de caractère qui s'affiche dans la fenêtre Debug. Est-ce que ça pourrait être un bug de la version Linux?
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Caractère inconnu?

Message par falsam »

Je passe la main à un utilisateur sous Linux ....
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Caractère inconnu?

Message par Ollivier »

Code : Tout sélectionner

Debug Chr(8217)
Debug '’'
Define u.u = asc("’") ; uhu (u comme unicode)
Debug u
Ça colle ?
jph
Messages : 68
Inscription : dim. 17/juil./2022 16:02

Re: Caractère inconnu?

Message par jph »

Ollivier a écrit : lun. 27/févr./2023 21:05

Code : Tout sélectionner

Debug Chr(8217)
Debug '’'
Define u.u = asc("’") ; uhu (u comme unicode)
Debug u
Ça colle ?
Oui ça marche. Merci. J'ai juste une question: Quand je fais Debug '’' j'obtiens 8217 et quand je fais Debug "’" j'obtiens le caractère ’ est-ce que ce comportement est expliqué quelque part dans la doc?
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Caractère inconnu?

Message par Ollivier »

Ça me fait buguer ta question.

Je passe la main à un utilisateur sous vitamines C.
jph
Messages : 68
Inscription : dim. 17/juil./2022 16:02

Re: Caractère inconnu?

Message par jph »

C'était juste pour savoir où c'est expliqué dans la doc pour savoir. Merci quand-même.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Caractère inconnu?

Message par Ollivier »

Je peux pas répondre. Je suis trop apostrophé...
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Caractère inconnu?

Message par Ollivier »

Alors euh... Le temps a passé. L'eau a coulé sous les ponts sans qu'une âme charitable ne daigne s'élever et pointer vers la page de documentation concernée.

Pour ma part, jamais je ne me suis posé cette question, puisque cette apostrophe est une des premières choses à maîtriser en Assembleur "évolué" (ms debug.com, mon 1er contact avec le language Assembleur n'étant pas un assembleur évolué, on doit se farcir les codes ASCII "manuellement").

Ainsi 'A' c'est 65.
et 90 c'est 'Z'.

Dans un convertisseur "hexa <=> décimal", le code source est hautement plus lisible quand on met directement le caractére plutôt que son numéro de code. Et, en Basic, cette syntaxe est plus courte (et rapide) que la fonction Asc(chaine$) qui fait la même chose.

À la base, PureBasic utilisait le language Flat Assembler qui traite cette apostrophe. Et donc PureBasic suit cette syntaxe, mais avec moins de liberté qu'en Assembleur : la chaîne est limitée à 4 caractères unicode en X64, tandis que la limite en Assembleur est bien au-delà vers les limites d'une longueur maximale de ligne de code source compilable.

Code : Tout sélectionner

; /!\ ASM
! DB 'je suis une chaîne ASCII entièrement stockée en mémoire à une adresse contrôlée.'
! DW 'je suis une chaîne UNICODE entièrement stockée en mémoire à une adresse contrôlée.'
En PureBasic, ça s'arrête à quatre la longueur max de caractères entre apostrophes.

Code : Tout sélectionner

Debug 'QUAT'
Si X86 : Affiche un nombre en base 256, où chaque caractère ASCII est un chiffre.
Si X64 : Affiche un nombre en base 65536, où chaque caractère UNICODE est un chiffre.

Mais alors, si c'est dans la doc PureBasic, ça, je n'en ai aucune idée.
Répondre