Page 1 sur 2

Caractère inconnu?

Publié : dim. 26/févr./2023 23:28
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.

Re: Caractère inconnu?

Publié : lun. 27/févr./2023 0:04
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)

Re: Caractère inconnu?

Publié : lun. 27/févr./2023 2:54
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?

Re: Caractère inconnu?

Publié : lun. 27/févr./2023 9:48
par falsam
Zoom dans la fenêtre de debug avec la molette de la souris pour voir si il apparait ...

Re: Caractère inconnu?

Publié : lun. 27/févr./2023 10:48
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?

Re: Caractère inconnu?

Publié : lun. 27/févr./2023 10:54
par falsam
Chez moi pas de souci. Ton caractère apparait bien dans la fenêtre de debug

Re: Caractère inconnu?

Publié : lun. 27/févr./2023 11:18
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+

Re: Caractère inconnu?

Publié : lun. 27/févr./2023 11:29
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?

Re: Caractère inconnu?

Publié : lun. 27/févr./2023 11:57
par falsam
Je passe la main à un utilisateur sous Linux ....

Re: Caractère inconnu?

Publié : lun. 27/févr./2023 21:05
par Ollivier

Code : Tout sélectionner

Debug Chr(8217)
Debug '’'
Define u.u = asc("’") ; uhu (u comme unicode)
Debug u
Ça colle ?

Re: Caractère inconnu?

Publié : mar. 28/févr./2023 5:30
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?

Re: Caractère inconnu?

Publié : mar. 28/févr./2023 12:42
par Ollivier
Ça me fait buguer ta question.

Je passe la main à un utilisateur sous vitamines C.

Re: Caractère inconnu?

Publié : mar. 28/févr./2023 13:32
par jph
C'était juste pour savoir où c'est expliqué dans la doc pour savoir. Merci quand-même.

Re: Caractère inconnu?

Publié : mar. 28/févr./2023 18:12
par Ollivier
Je peux pas répondre. Je suis trop apostrophé...

Re: Caractère inconnu?

Publié : mer. 01/mars/2023 22:31
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.