|
Convertire une chaine de caractere en binaire |
Started by Fred2355, Mar., 04 2018 12:20 AM - 23 replies |
| |
| | | |
|
| |
Registered member 231 messages Popularité : +7 (7 votes) |
|
Posted on March, 04 2018 - 12:20 AM |
Bonsoir,
Ce sujet semble déjà avoir été traité, mais je ne trouve pas la réponse qui me correponde.
Voici mon questionnement.
J'ai une chaine de caractères de type "12ABC DE3456 FG7890" que je voudrais traduire en valeur binaire sur 8 bits de type "0010010101110...."
Comment faire?
Ensuite après avoir manipulé ces données Binaire, je doit reconstituer une chaine de caractères. Donc passer de "110110110001010...." à "TOTO123AZERTY987"
Et là aussi comment faire?
Merci pour vos commentaires. Fred |
| |
| |
| | | |
|
| | |
| |
Registered member 3,898 messages Popularité : +227 (347 votes) |
|
Posted on March, 04 2018 - 9:45 PM |
Bonjour, As-tu déjà entendu parler du codage ASCII et de l'UNICODE?
-- Il y a peut être plus simple, mais, ça tourneMessage modified, March, 04 2018 - 9:47 PM |
| |
| |
| | | |
|
| | |
| |
Registered member 231 messages Popularité : +7 (7 votes) |
|
Posted on March, 04 2018 - 10:30 PM |
Oui, bien sure, mais entre ANSI et Unicode, de ce que je sais c'est que A reste A et B reste B. Et je ne sais pas comment A peut etre converti en binaire. Exemple, si j'ai un mot qui est ABC, j'aimerais avoir 010000010100001001000011 une fois converti. Je peux faire comment?
Paracolonialement votre. |
| |
| |
| | | |
|
| | |
| |
Registered member 3,898 messages Popularité : +227 (347 votes) |
|
Posted on March, 05 2018 - 12:22 AM |
A correspond à 65 donc à 41 en Hexa et 0100 0001 en binaire. Ta chaine de départ est en Hexa à priori (comme c'est un exemple, on passera sur le fait que G n'est pas valable.) Il faut maintenant savoir si elle est codée en Unicode ou en UTF8. Tu parles de 8 bits, on peut donc sans trop de problème s'orienter vers de l'UTF8. Si le nombre de caractère est impair, on boure par un "0" à gauche et on extrait les caractères par groupe de 2, 01, 2A, BC, ........ 90. Chaque paire représentant la valeur Hexa d'un caractère. Il suffit de récupérer ce caractère via la fonction Caract de Windev. Caract(0x01), Caract(0x2A)........, Caract(0x90)
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Registered member 231 messages Popularité : +7 (7 votes) |
|
Posted on March, 05 2018 - 10:08 AM |
Merci pour ton commentaire. La chaîne de caractères à traiter contient toutes les lettres de A à Z et aussi qq caractères spéciaux. Est ce que ton idée est applicable? As tu un bout de.code à me proposer? Merci |
| |
| |
| | | |
|
| | |
| |
Posted on March, 05 2018 - 10:41 AM |
Un petit exemple:
sHexa est une chaîne="FFFF0205"
nNb est un entier sur 8= Val(sHexa,"x")
Trace( EnBinaire(nNb,64))
0000000000000000000000000000000001111111111111110000001000000101
PROCÉDURE INTERNE EnBinaire(nValeur est un entier sur 8,nNbBits est un entier) sChaineRetournée est une chaîne
POUR c=nNbBits À 1 PAS -1 SI nValeur[c]=1 ALORS sChaineRetournée+="1" SINON sChaineRetournée+="0" FIN FIN RENVOYER sChaineRetournée
FIN
Bon dev,
Eric |
| |
| |
| | | |
|
| | |
| |
Registered member 3,898 messages Popularité : +227 (347 votes) |
|
Posted on March, 05 2018 - 4:35 PM |
Si la chaîne à traiter contient tous les caractères alphanumériques + des caractères spéciaux, elle est chiffrée. Sans la clé, tu ne peux "théoriquement" pas retrouver la chaîne d'origine
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Registered member 231 messages Popularité : +7 (7 votes) |
|
Posted on March, 05 2018 - 5:13 PM |
Eric: merci mais tes codes ne prennent pas en compte les lettres à partir de G à Z et autres " , ". Voroltinquo: non la chaine n est ni codée ni chiffrée. Par exemple une chaîne de caractères fournie par un GPS sur son port com contient des chiffres de 0 à 9 et des lettres jusqu a Z.
Au avez vous comme autres idée.? |
| |
| |
| | | |
|
| | |
| |
Registered member 3,898 messages Popularité : +227 (347 votes) |
|
Posted on March, 05 2018 - 6:06 PM |
Donne un exemple clair : J'ai telle donnée, je veux obtenir cette donnée
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Registered member 231 messages Popularité : +7 (7 votes) |
|
Posted on March, 05 2018 - 7:13 PM |
Exemple, si j'ai un mot qui est ABC, j'aimerais avoir 010000010100001001000011 une fois converti. Je peux faire comment? |
| |
| |
| | | |
|
| | |
| |
Registered member 281 messages Popularité : +24 (26 votes) |
|
Posted on March, 05 2018 - 11:16 PM |
Bonsoir,
Mais... Quel est le but de cette conversion binaire ?! |
| |
| |
| | | |
|
| | |
| |
Registered member 3,898 messages Popularité : +227 (347 votes) |
|
Posted on March, 05 2018 - 11:45 PM |
-Récupérer un caractère -Récupérer le code ASCII de ce caractère via la fonction Asc -Convertir la valeur obtenue de décimal en binaire.
On fait ça tant que la chaine initiale n'est pas vide Astuce Asc("Barbier")=Asc("B")
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Registered member 231 messages Popularité : +7 (7 votes) |
|
Posted on March, 06 2018 - 8:00 AM |
Bonjour Damien,
Pour reprendre, j'ai une chaine de caractère qui vient depuis un capteur électronique que je suis en train de développer. Pour faire simple et par analogie, la chaine obtenue est du type: "$GPRMC,053740.000,A,2503.6319,N,12136.0099,E,2.69,79.65,100106,,,A*53 " (celle ci est celle des GPS au format NMEA, et contient suffisamment de caractères pour être représentative mais n'est pas celle de mon projet.).
Je dois convertir chacun des caractères d'une chaine aussi fournie en chaine binaire "01.....0010101...." pour remplir un tableau de 0 et de 1 pour traitement annexe.
Quand je prend une ligne de test que je remplis de 0 et de 1, mon application fonctionne. Mais mon probleme est de transformer une chaine telle que celle aussi compliquée que celle d'un GPS en une quantité de caractères en 0 et 1.
Suis je assez clair? Merci |
| |
| |
| | | |
|
| | |
| |
Registered member 3,898 messages Popularité : +227 (347 votes) |
|
Posted on March, 06 2018 - 10:21 AM |
Fred2355 a écrit :
Suis je assez clair?
Oui, je comprend mieux. Tu as en fait une série de données séparées par des virgules, le tout encadré d'une en-tête et d'une clé. Ces données sont soit décimales, soit alphabétiques. Est-ce bien celà ?
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Registered member 231 messages Popularité : +7 (7 votes) |
|
Posted on March, 06 2018 - 11:13 AM |
une série de données Oui
séparées par des virgules, Pas spécifiquement. Ça peut être '":;/)
le tout encadré d'une en-tête et d'une clé. Non
Ces données sont soit décimales, soit alphabétiques. Oui |
| |
| |
| | | |
|
| | |
| |
Registered member 3,898 messages Popularité : +227 (347 votes) |
|
Posted on March, 06 2018 - 12:14 PM |
Quelle est la structure exacte, l'as-tu définie, la connais tu? Je suis en mode
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Registered member 231 messages Popularité : +7 (7 votes) |
|
Posted on March, 06 2018 - 2:01 PM |
Le probleme n'est pas de connaitre la longueur, les marquants, le début, la fin ou le checksum de la chaine de caractère (comprenant des chiffres, des lettres et des caractères spéciaux). Le probleme est comment convertir la chaine ces caractères en binaire.
Je sais que j'aurais une boucle à faire du type:
Pour i = 1 à taille(machaine) extraction 1 à 1 des elements de ma chaine conversion en binaire de l'elements extrait fin
Mon probleme se situe dans la procédure pour faire la conversion. Merci pour ta comprehension |
| |
| |
| | | |
|
| | |
| |
Registered member 3,898 messages Popularité : +227 (347 votes) |
|
Posted on March, 06 2018 - 3:14 PM |
C'est au programme de 3° Conversion de N vers une base B Récupérer le reste R de la division de N par B Soustraire le R à N Diviser par B Réitérer l'opération tant que N<B
Le résultat est de la foirme RnRn-1........R3R2R1 (R1 étant le 1° reste, R2 le 2° ....)
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Registered member 231 messages Popularité : +7 (7 votes) |
|
Posted on March, 06 2018 - 4:04 PM |
C est bien ! Merci! Mais quels sont les instructions Windev qui font ça? |
| |
| |
| | | |
|
| | |
| |
Registered member 3,898 messages Popularité : +227 (347 votes) |
|
Posted on March, 06 2018 - 4:52 PM |
FONCTION DecimalVersBase(nNombreAConvertir est entier,nBase est entier):chaîne sResultat est une chaîne nReste est entier
TANTQUE nNombreAConvertir>=nBase nReste=Modulo(nNombreAConvertir,nBase) nNombreAConvertir-=nReste nNombreAConvertir=nNombreAConvertir/nBase sResultat=BaseSup9(nReste)+sResultat FIN sResultat=BaseSup9(nNombreAConvertir)+sResultat RENVOYER sResultat
FONCTION BaseSup9(nReste est un entier):chaîne SI nReste<10 ALORS RENVOYER nReste SINON RENVOYER Caract(55+nReste) FIN
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Registered member 231 messages Popularité : +7 (7 votes) |
|
Posted on March, 07 2018 - 9:55 AM |
Bonjour Merci pour ces codes. Je suis en train de les tester. Je te dirais ce qu'il en est asap. Merci. |
| |
| |
| | | |
|
| | |
| |
Registered member 231 messages Popularité : +7 (7 votes) |
|
Posted on March, 21 2018 - 8:43 PM |
Bonsoir, Malgré tout mes essais, les codes que tu m'as proposé ne fonctoinne pas. dommage. |
| |
| |
| | | |
|
| | |
| |
Registered member 25 messages |
|
Posted on September, 30 2022 - 2:02 AM |
Je suis tombé sur ce sujet car je cherchais une solution pour une variable binaire.
Voila ma solution
Procedure tester() txtACoder est une chaîne = "$GPRMC,053740.000,A,2503.6319,N,12136.0099,E,2.69,79.65,100106,,,A*53 "
Trace (txtEnBinaire(" ")) Trace (txtEnBinaire("a")) Trace (txtEnBinaire("b")) Trace (txtEnBinaire("$GPRMC,053740.0")) Trace (txtEnBinaire(txtACoder))
PROCEDURE INTERNE txtEnBinaire(txt est une chaîne ) nbCar est un entier = Taille(txt) txtBin est une chaîne POUR i = 1 À nbCar nbAsc est un entier=Asc(txt[i]) POUR j=7 À 0 PAS -1 txtBin += bitDécaleDroite(nbAsc,j) Modulo 2 FIN FIN RENVOYER txtBin FIN
résultat de la trace (je n'ai pas mis le dernier, il est trop long)
00100000 01100001 01100010 001001000100011101010000010100100100110101000011001011000011000000110101001100110011011100110100001100000010111000110000Message modified, September, 30 2022 - 2:19 AM |
| |
| |
| | | |
|
| | |
| |
Registered member 25 messages |
|
Posted on October, 02 2022 - 7:38 PM |
Je m'aperçois que je n'ai pas donné la fonction inverse qui convertit un texte binaire en texte
voir ci dessous, testé avec le resultat conversion du texte "$GPRMC,053740.0"
Procedure tester() txtBin1 est une chaîne = "001001000100011101010000010100100100110101000011001011000011000000110101001100110011011100110100001100000010111000110000"
n est un entier=1 resu est une chaîne longTxtB est un entier = Taille(txtBin1) octetb est une chaîne Val,puiss2 est un entier TANTQUE n<longTxtb octetb=Milieu(txtBin1,n,8) Val = 0 puiss2 =1 POUR j = 0 À 7 SI octetb[8-j] = "1" ALORS Val += puiss2 puiss2 += puiss2 FIN resu += Caract(Val) n += 8 FIN Trace(resu)
je laisse le soin au lecteur de faire les mêmes fonctions pour les chaines UNICODE (sur 2 octets au lieu d'un par caractèreMessage modified, October, 02 2022 - 8:18 PM |
| |
| |
| | | |
|
| | | | |
| | |
|