|
Convertire une chaine de caractere en binaire |
Débuté par Fred2355, 04 mar. 2018 00:20 - 23 réponses |
| |
| | | |
|
| |
Membre enregistré 231 messages Popularité : +7 (7 votes) |
|
Posté le 04 mars 2018 - 00:20 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 887 messages Popularité : +227 (347 votes) |
|
Posté le 04 mars 2018 - 21:45 |
Bonjour, As-tu déjà entendu parler du codage ASCII et de l'UNICODE?
-- Il y a peut être plus simple, mais, ça tourneMessage modifié, 04 mars 2018 - 21:47 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 231 messages Popularité : +7 (7 votes) |
|
Posté le 04 mars 2018 - 22:30 |
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. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 887 messages Popularité : +227 (347 votes) |
|
Posté le 05 mars 2018 - 00:22 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 231 messages Popularité : +7 (7 votes) |
|
Posté le 05 mars 2018 - 10:08 |
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 |
| |
| |
| | | |
|
| | |
| |
Posté le 05 mars 2018 - 10:41 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 887 messages Popularité : +227 (347 votes) |
|
Posté le 05 mars 2018 - 16:35 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 231 messages Popularité : +7 (7 votes) |
|
Posté le 05 mars 2018 - 17:13 |
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.? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 887 messages Popularité : +227 (347 votes) |
|
Posté le 05 mars 2018 - 18:06 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 231 messages Popularité : +7 (7 votes) |
|
Posté le 05 mars 2018 - 19:13 |
Exemple, si j'ai un mot qui est ABC, j'aimerais avoir 010000010100001001000011 une fois converti. Je peux faire comment? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 281 messages Popularité : +24 (26 votes) |
|
Posté le 05 mars 2018 - 23:16 |
Bonsoir,
Mais... Quel est le but de cette conversion binaire ?! |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 887 messages Popularité : +227 (347 votes) |
|
Posté le 05 mars 2018 - 23:45 |
-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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 231 messages Popularité : +7 (7 votes) |
|
Posté le 06 mars 2018 - 08:00 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 887 messages Popularité : +227 (347 votes) |
|
Posté le 06 mars 2018 - 10:21 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 231 messages Popularité : +7 (7 votes) |
|
Posté le 06 mars 2018 - 11:13 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 887 messages Popularité : +227 (347 votes) |
|
Posté le 06 mars 2018 - 12:14 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 231 messages Popularité : +7 (7 votes) |
|
Posté le 06 mars 2018 - 14:01 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 887 messages Popularité : +227 (347 votes) |
|
Posté le 06 mars 2018 - 15:14 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 231 messages Popularité : +7 (7 votes) |
|
Posté le 06 mars 2018 - 16:04 |
C est bien ! Merci! Mais quels sont les instructions Windev qui font ça? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 887 messages Popularité : +227 (347 votes) |
|
Posté le 06 mars 2018 - 16:52 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 231 messages Popularité : +7 (7 votes) |
|
Posté le 07 mars 2018 - 09:55 |
Bonjour Merci pour ces codes. Je suis en train de les tester. Je te dirais ce qu'il en est asap. Merci. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 231 messages Popularité : +7 (7 votes) |
|
Posté le 21 mars 2018 - 20:43 |
Bonsoir, Malgré tout mes essais, les codes que tu m'as proposé ne fonctoinne pas. dommage. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 25 messages |
|
Posté le 30 septembre 2022 - 02:02 |
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 modifié, 30 septembre 2022 - 02:19 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 25 messages |
|
Posté le 02 octobre 2022 - 19:38 |
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 modifié, 02 octobre 2022 - 20:18 |
| |
| |
| | | |
|
| | | | |
| | |
|