PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Chaîne avec Héxadécimal vers Entier
Chaîne avec Héxadécimal vers Entier
Débuté par Christian Gstalder, 12 oct. 2005 15:50 - 5 réponses
Posté le 12 octobre 2005 - 15:50
Re-bonjour,

A l'inverse de ma question précédente, comment affecter à un entier une
valeur contenue dans une chaîne?

Exemple :

La chaîne MaChaine contient à la position 6 la valeur 0x00000055 (85 en
décimal).

Les codes suivants ne donnent que 0 alors que je voudrais qu'ils donnent 85:

MonEntier = Milieu(MaChaine,6,4)
MonEntier = Val(Milieu(MaChaine,6,4),2)


Merci d'avance

--

Christian Gstalder
Posté le 12 octobre 2005 - 16:09
Salut

Regarde dans la soucoupe. Il y a un assistant de code pour la
convertion hexadécimal vers décimal qui génère la proc.suivante.

FONCTION HexaVersEntier(ch)

ValD est un entier
ValH est une chaîne
i est un entier

ValD=0
ValH=Majuscule(ch)

// Si la chaîne n'est pas nulle
SI ValH<>"" ALORS
// Pour chaque lettre de la chaîne
POUR i=Taille(ValH) A 1 PAS -1
// On la convertit en sa valeur décimale
// et on l'ajoute au résultat en la multipliant par la
puissance de 16 correspondante
SELON ValH[[Taille(ValH)+1-i]]
CAS "A": ValD*Puissance(16,i-1)+ValD
CAS "B": ValD*Puissance(16,i-1)+ValD
CAS "C": ValD*Puissance(16,i-1)+ValD
CAS "D": ValD*Puissance(16,i-1)+ValD
CAS "E": ValD*Puissance(16,i-1)+ValD
CAS "F": ValD*Puissance(16,i-1)+ValD
AUTRES CAS:
ValD=Val(ValH[[Taille(ValH)+1-i]])*Puissance(16,i-1)+ValD
FIN
FIN
FIN

// Renvoie le résultat
RENVOYER ValD



--
Ciao
Pat Biker
http://aaa.windev.free.fr/


On Wed, 12 Oct 2005 13:50:17 +0200, "Christian Gstalder"
<cgstalde.spamno@chpg.mc> wrote:


Re-bonjour,

A l'inverse de ma question précédente, comment affecter à un entier une
valeur contenue dans une chaîne?

Exemple :

La chaîne MaChaine contient à la position 6 la valeur 0x00000055 (85 en
décimal).

Les codes suivants ne donnent que 0 alors que je voudrais qu'ils donnent 85:

MonEntier = Milieu(MaChaine,6,4)
MonEntier = Val(Milieu(MaChaine,6,4),2)


Merci d'avance
Posté le 13 octobre 2005 - 11:02
Voir les fonctions NumériqueVersChaine et Val

Ex. :

MaChaine = "0x" + NumériqueVersChaine(85,"08x")

MonEntier = Val(Milieu("0x00000055",3),"x")
Posté le 13 octobre 2005 - 11:56
Ce que tu me proposes n'est pas ce que je veux.

Ton exemple part du principe que la variable contient une chaîne ressemblant
à de l'Héxa (MaChaine = "00BB"). Mon problème est que ma variable contient
une valeur héxadécimale.

--

Christian Gstalder


"Patrick Biker" <pat.biker@wdgotcha.atspace.com> a écrit dans le message de
news:06vpk1p3o77jbg70evjcetv0u6ee1i78f8@4ax.com...

Salut

Regarde dans la soucoupe. Il y a un assistant de code pour la
convertion hexadécimal vers décimal qui génère la proc.suivante.

FONCTION HexaVersEntier(ch)

ValD est un entier
ValH est une chaîne
i est un entier

ValD=0
ValH=Majuscule(ch)

// Si la chaîne n'est pas nulle
SI ValH<>"" ALORS
// Pour chaque lettre de la chaîne
POUR i=Taille(ValH) A 1 PAS -1
// On la convertit en sa valeur décimale
// et on l'ajoute au résultat en la multipliant par la
puissance de 16 correspondante
SELON ValH[[Taille(ValH)+1-i]]
CAS "A": ValD*Puissance(16,i-1)+ValD
CAS "B": ValD*Puissance(16,i-1)+ValD
CAS "C": ValD*Puissance(16,i-1)+ValD
CAS "D": ValD*Puissance(16,i-1)+ValD
CAS "E": ValD*Puissance(16,i-1)+ValD
CAS "F": ValD*Puissance(16,i-1)+ValD
AUTRES CAS:
ValD=Val(ValH[[Taille(ValH)+1-i]])*Puissance(16,i-1)+ValD
FIN
FIN
FIN

// Renvoie le résultat
RENVOYER ValD



--
Ciao
Pat Biker
http://aaa.windev.free.fr/


On Wed, 12 Oct 2005 13:50:17 +0200, "Christian Gstalder"
<cgstalde.spamno@chpg.mc> wrote:


Re-bonjour,

A l'inverse de ma question précédente, comment affecter à un entier une
valeur contenue dans une chaîne?

Exemple :

La chaîne MaChaine contient à la position 6 la valeur 0x00000055 (85 en
décimal).

Les codes suivants ne donnent que 0 alors que je voudrais qu'ils donnent

85:

MonEntier = Milieu(MaChaine,6,4)
MonEntier = Val(Milieu(MaChaine,6,4),2)


Merci d'avance
Posté le 13 octobre 2005 - 16:37
Salut

Tu veux dire que ta chaine contient déjà du binaire. c'est une chaine
d'octet.
Utilise la commande Transfer comme expliqué dans mon autre post vers
une structure.

--

Ciao
Pat Biker
http://aaa.windev.free.fr/


On Thu, 13 Oct 2005 09:56:14 +0200, "Christian Gstalder"
<cgstalde.spamno@chpg.mc> wrote:


Ce que tu me proposes n'est pas ce que je veux.

Ton exemple part du principe que la variable contient une chaîne ressemblant
à de l'Héxa (MaChaine = "00BB"). Mon problème est que ma variable contient
une valeur héxadécimale.
Posté le 13 octobre 2005 - 18:07
Oui, c'est ce que j'ai fait :

Procedure BinAS2BinPC(BinAS est une chaîne fixe sur 4)

BinPC est un entier sur 4 octets
i est un entier
j est un entier = Dimension((BinAS)) - 1

POUR i = 0 A j
Transfert(&BinPC+j-i,&BinAS+i,1)
FIN

RENVOYER BinPC


Merci pour les pistes et ton aide
--

Christian Gstalder


"Patrick Biker" <pat.biker@wdgotcha.atspace.com> a écrit dans le message de
news:b6lsk1tnfi2640lv5bppf013so82jhc5hs@4ax.com...

Salut

Tu veux dire que ta chaine contient déjà du binaire. c'est une chaine
d'octet.
Utilise la commande Transfer comme expliqué dans mon autre post vers
une structure.

--

Ciao
Pat Biker
http://aaa.windev.free.fr/


On Thu, 13 Oct 2005 09:56:14 +0200, "Christian Gstalder"
<cgstalde.spamno@chpg.mc> wrote:


Ce que tu me proposes n'est pas ce que je veux.

Ton exemple part du principe que la variable contient une chaîne

ressemblant
> >à de l'Héxa (MaChaine = "00BB"). Mon problème est que ma variable
contient
une valeur héxadécimale.