Détecter les caractères non imprimables d'une string
smoitry
Messages postés69Date d'inscriptionvendredi 27 décembre 2002StatutMembreDernière intervention26 juillet 2007
-
23 mars 2006 à 12:15
smoitry
Messages postés69Date d'inscriptionvendredi 27 décembre 2002StatutMembreDernière intervention26 juillet 2007
-
23 mars 2006 à 14:26
Bonjour à tous !
Petite question : je reçois des flux de données par une socket. Ces flux commencent par des lettres imprimables (affichables à l'écran) suivi d'octets issus d'un flux binaire. Je reçois tout ça dans une string, et je voudrais afficher à l'écran ou mettre dans un fichier texte (un log par exemple) le début de ces phrases, càd les caractères imprimables.
Exemple :
Je reçois la suite d'octets suivante :
083-084-065-084-032-099-002-000-000-241-006-000-000-013-010
Ce qui nous donne "STAT c" suivi d'octets qui ne correspondent ni à des lettres de l'alphabet, ni des chiffres ni signes de ponctuation etc...
Je voudrais donc n'extraire que les premiers octets de cette phrase pour soit les afficher soit les mettre dans un fichier de texte pur. Or, ici il s'agit des 6 premiers octets, mais ça varie.
Avez vous une solution pour faire ça rapidement sans avoir à tester chaque octet et vérifier par de nombreux tests si c'est un octet valable ou pas ...
ArnaudMeurgues
Messages postés1Date d'inscriptionjeudi 23 mars 2006StatutMembreDernière intervention23 mars 2006 23 mars 2006 à 14:09
Il me paraît difficile de ne pas tester chaque octet, mais il semble possible, en revanche, de savoir si le caractère est imprimable ou pas. Normalement, tous les caractères sont imprimables exceptés les caractères de control (et 0 s'il ne fait pas partie des caractères de control).
smoitry
Messages postés69Date d'inscriptionvendredi 27 décembre 2002StatutMembreDernière intervention26 juillet 2007 23 mars 2006 à 14:26
Pas vraiment, car j'ai testé, l'octet de valeur 1 n'est pas un caractère de contrôle, pourtant il n'est pas "imprimable", je veux dire par là qu'il est traduit par un carré vide. Je vais donc tenter de combiner des tests sur IdLetterOrDigit, IsWhiteSpace, IsPonctuation etc... mais je me demande s'il y a un gain en performances ... J'espérais l'existance d'une fonction qui renvoie l'index du premier caractère non "valide" de la chaîne.
Je vais faire un test de performances et en publier les résultats ...