Page 1 sur 1

[RESOLU]StringByteLength pourquoi un point

Publié : ven. 03/janv./2020 13:35
par doudouvs
Vous savez pourquoi il y a un point entre chaque caractère ? alors que dans Texte il n'y en a pas.

Le but et de manipuler un string afin de récupérer les octets

Code : Tout sélectionner

 Texte.s = "Salut !!!"

  *mem = AllocateMemory(StringByteLength(Texte) + SizeOf(CHARACTER))
  CopyMemory(@Texte, *mem, StringByteLength(Texte) + SizeOf(CHARACTER))
  Debug MemorySize(*mem)
  Debug PeekS(*mem)
  ShowMemoryViewer(*mem, MemorySize(*mem))

Résultat :

Code : Tout sélectionner

000000000066DA98  53 00 61 00 6C 00 75 00 74 00 20 00 21 00 21 00  S.a.l.u.t. .!.!.
000000000066DAA8  21 00 00 00                                      !...


Re: StringByteLength pourquoi un point

Publié : ven. 03/janv./2020 13:51
par Marc56
Parce que par défaut le stockage des chaines en mémoire se fait en Unicode
https://www.purebasic.com/french/docume ... icode.html
Donc sur deux octets, ce qu'affiche ShowMemoryViewer()
:wink:

Re: StringByteLength pourquoi un point

Publié : ven. 03/janv./2020 14:07
par doudouvs
Merci Marc56 pour l'info et la Doc, du coup ça marche vraiment mieux

Code : Tout sélectionner

*Texte = Ascii("Salut !!!")
  ShowMemoryViewer(*Texte, MemorySize(*Texte))

Re: [RESOLU]StringByteLength pourquoi un point

Publié : ven. 03/janv./2020 14:10
par doudouvs
Oups j'ai parler trop vite il rajoute un point a la fin

Code : Tout sélectionner

000000000066CA68  53 61 6C 75 74 20 21 21 21 00                    Salut !!!.

Re: [RESOLU]StringByteLength pourquoi un point

Publié : ven. 03/janv./2020 14:14
par doudouvs
Grrr

Code : Tout sélectionner

  ShowMemoryViewer(*Texte, MemorySize(*Texte)-1)
Debug PeekS(*Texte, -1, #PB_Ascii)

La c'est tout BON

Code : Tout sélectionner

000000000066CA68  53 61 6C 75 74 20 21 21 21                       Salut !!!