Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[HELP] Format$(Hex(20025),"0000")

8 réponses
Avatar
Sam Vimaire
Bonjour.

Help !
Je regardais la cause d'une erreur dans un programme VB quand je tombe
sur ca.

Debug.Print Format$(Hex(20026), "0000")
affiche 4E3A

Mais
Debug.Print Format$(Hex(20025), "0000")
affiche
400000000000000000000000000000000000000

Quel est ce mystère ?

8 réponses

Avatar
Sam Vimaire
Après mûre réflexion, Sam Vimaire a écrit :
Debug.Print Format$(Hex(20025), "0000")
affiche
400000000000000000000000000000000000000



J'ai remplacé par
Left$(Hex(20025) & "0000",4)

Mais quelle est mon erreur ?
Ai-je mal employé Format$ ?
Avatar
PH
Sam Vimaire a écrit :
Après mûre réflexion, Sam Vimaire a écrit :
Debug.Print Format$(Hex(20025), "0000")
affiche
400000000000000000000000000000000000000



J'ai remplacé par
Left$(Hex(20025) & "0000",4)

Mais quelle est mon erreur ?
Ai-je mal employé Format$ ?




Hex(N) renvoie une chaine de caractères, Format$ attend un nombre

20026 donne 4E3A qui ne peut être converti en nombre donc renvoie la
chaîne elle-même

20025 donne 4E39 ce qui sous forme de nombre donne un 4 suivi de 39 zéro
et se traduit avec format$ par un 4 suivi de 39 zéros.

Erreur intéressante.
Avatar
Sam Vimaire
PH a couché sur son écran :
Hex(N) renvoie une chaine de caractères, Format$ attend un nombre



*Merci* pour ces eclaircissements. Tout est clair, maintenant.

Nonobstant, la documentation indique bien pour entrée de Format : "any
valid expression"

et expression renvoie à
A combination of keywords, operators, variables, and constants that
yields a string, number, or object. An expression can be used to
perform a calculation, manipulate characters, or test data.

Ca reste abscons...
Avatar
Sam Vimaire
Sam Vimaire a exposé le 19/12/2008 :
Nonobstant, la documentation indique bien pour entrée de Format : "any valid
expression"



Je retire ce dernier post.
C'est trompeur, mais bien logique.
Avatar
LE TROLL
Ah, pas mal, alors l'un est pris pour de l'hexa, et l'autre pour un
exposant, ouais, fallait y penser :o)

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"PH" a écrit dans le message de news:
%23rp9C%
| Sam Vimaire a écrit :
| > Après mûre réflexion, Sam Vimaire a écrit :
| >> Debug.Print Format$(Hex(20025), "0000")
| >> affiche
| >> 400000000000000000000000000000000000000
| >
| > J'ai remplacé par
| > Left$(Hex(20025) & "0000",4)
| >
| > Mais quelle est mon erreur ?
| > Ai-je mal employé Format$ ?
| >
| >
| Hex(N) renvoie une chaine de caractères, Format$ attend un nombre
|
| 20026 donne 4E3A qui ne peut être converti en nombre donc renvoie la
| chaîne elle-même
|
| 20025 donne 4E39 ce qui sous forme de nombre donne un 4 suivi de 39 zéro
| et se traduit avec format$ par un 4 suivi de 39 zéros.
|
| Erreur intéressante.
Avatar
jean-marc
"Sam Vimaire" wrote in message
news:494b7784$0$9254$
Sam Vimaire a exposé le 19/12/2008 :
Nonobstant, la documentation indique bien pour entrée de Format : "any
valid expression"





hello,

très intéressant en effet.

Voici une méthode qui marche dans tous les cas :
? Replace(format$(hex(20025), "@@@@")," ", "0")
4E39

? replace(format$(hex(20026), "@@@@")," ", "0")
4E3A

? replace(format$(hex(10), "@@@@")," ", "0")
000A

Le "@" indique un caractère ou un espace, et on remplace
les espaces par des "0".

Il ne reste plus qu'à en faire une petite fonction:

Function SafeFormatHex(byval n As Long) As String

SafeFormatHex = Replace(Format$(Hex(n), "@@@@"), " ", "0")
End Function

Et voila :-)

Cordialement;

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
jeanmarcnoury
On 19 déc, 11:29, Sam Vimaire wrote:
Sam Vimaire a exposé le 19/12/2008 :

> Nonobstant, la documentation indique bien pour entrée de Format : "an y valid
> expression"

Je retire ce dernier post.
C'est trompeur, mais bien logique.



hello,

très intéressant en effet.

Voici une méthode qui marche dans tous les cas :
? Replace(format$(hex(20025), "@@@@")," ", "0")
4E39

? replace(format$(hex(20026), "@@@@")," ", "0")
4E3A

? replace(format$(hex(10), "@@@@")," ", "0")
000A

Le "@" indique un caractère ou un espace, et on remplace
les espaces par des "0".

Il ne reste plus qu'à en faire une petite fonction:

Function SafeFormatHex(byval n As Long) As String

SafeFormatHex = Replace(Format$(Hex(n), "@@@@"), " ", "0")
End Function

Et voila :-)

Cordialement;

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Sam Vimaire
Sam Vimaire a exposé le 19/12/2008 :
Après mûre réflexion, Sam Vimaire a écrit :
Debug.Print Format$(Hex(20025), "0000")
affiche
400000000000000000000000000000000000000



J'ai remplacé par
Left$(Hex(20025) & "0000",4)



Oula.. Personne n'a corrigé ! ;o)
(Fin d'année.. neurones en bernes)
C'est
Right$("0000" & HEx(20025),4)
qu'il faut écrire.. si je veux mon resultat sur 4 digits.)