[RESOLU]Décodage caractères ASCII - Raspberry Pi Forums
salut à tous,
je rencontre un petit souci de décodage de caractère, et je ne sais pas si c'est mon code c++ ou si ça vient de linux raspbian jessie...
voila mon souci.
j'interroge un appareil via rs485, je récupère des données que j'arrive à enregistrer dans un fichier.
par contre selon le type d'appareil, je vais avoir deux caractères en début de donnée (null et stx), ou encore 0x00 et 0x02
voici mon code c'est surtout dans la fonction setdata que ça se passe, mes données récupérées sont dans finalbuf qui contient 131076 octets: bref, j'ai essayé plusieurs choses, mais même lorsque j'essaye de faire un "cout" des deux premiers caractères du tableau ou de la chaine, j'obtiens.... rien, à chaque fois rien.
or ensuite j'enregistre toutes mes données dans un fichier et lorsque j'ouvre ce fichier sous linux avec kate, les deux premiers caractères sont des rectangles alors que si j'ouvre ce fichier sous windows, j'ai bien mon null et stx
merci pour votre aide
je rencontre un petit souci de décodage de caractère, et je ne sais pas si c'est mon code c++ ou si ça vient de linux raspbian jessie...
voila mon souci.
j'interroge un appareil via rs485, je récupère des données que j'arrive à enregistrer dans un fichier.
par contre selon le type d'appareil, je vais avoir deux caractères en début de donnée (null et stx), ou encore 0x00 et 0x02
voici mon code c'est surtout dans la fonction setdata que ça se passe, mes données récupérées sont dans finalbuf qui contient 131076 octets:
code: select all
//je récupère le début de mes données dans une chaine if(pfirstpagetoread == 0x01){ string data; for(int = 0; < 50; i++) data.push_back(finalbuf[i]); setdata(data); // appel fonction de définition produit } /** * permet de récupérer le répertoire et le s3.2 ou s3.3 */ bool lecturedm::setdata(string ptotreat){ char strtemp[2]; // recupération du premier caractère char premchar = ptotreat.at(0); sprintf(strtemp, "%c", premchar); int prem = atoi(strtemp); cout << "premchar: " << functions::asciitohex(premchar) << endl; cout << "prem: " << prem << endl; // recupération du second caractère char secchar = ptotreat.at(1); sprintf(strtemp, "%c", secchar); int sec = atoi(strtemp); cout << "secchar: " << functions::asciitohex(secchar) << endl; cout << "sec: " << sec << endl; if(prem == 0x00 && sec == 0x02) // s3.2 s33 = true; if(!s33) // s3.2 - definition du répertoire commence au 17ème caractères et on en prend 8 dirname = ptotreat.substr(12, 15); else // s3.3 - definition du répertoire commence au 19ème caractères et on en prend 8 dirname = ptotreat.substr(14, 15); return true; } // et la fonction asciitohex /** * fonction de converion de * valeurs ascii en hexa * valeur de 0 à f * \param: valeur à convertir * \return: val en hexa */ unsigned char functions::asciitohex(unsigned char pval){ if(pval > 0x2f && pval < 0x40) return pval - 0x30; else if(pval > 0x40 && pval < 0x47) return pval - 0x37; return 0x00; } or ensuite j'enregistre toutes mes données dans un fichier et lorsque j'ouvre ce fichier sous linux avec kate, les deux premiers caractères sont des rectangles alors que si j'ouvre ce fichier sous windows, j'ai bien mon null et stx
merci pour votre aide
pour info, je suis rentré chez moi et j'ai testé un bout de code sur la console sous linux mint et j'obtiens le même résultat: résultat: néant, rien , queudal, quetchi, niente....
comment on fait pour afficher soit stx, soit 02....
merci
code: select all
test=02 echo $test | awk '{printf("%c\n",$1)}' comment on fait pour afficher soit stx, soit 02....
merci
raspberrypi
Comments
Post a Comment