Détecter les caractères non imprimables d'une string

Signaler
Messages postés
69
Date d'inscription
vendredi 27 décembre 2002
Statut
Membre
Dernière intervention
26 juillet 2007
-
Messages postés
69
Date d'inscription
vendredi 27 décembre 2002
Statut
Membre
Dernière intervention
26 juillet 2007
-
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 ...

Merci pour votre aide !

Stéphane

2 réponses

Messages postés
1
Date d'inscription
jeudi 23 mars 2006
Statut
Membre
Dernière intervention
23 mars 2006

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).

Est-ce que Char.isControl() vous conviendrait ?
Messages postés
69
Date d'inscription
vendredi 27 décembre 2002
Statut
Membre
Dernière intervention
26 juillet 2007

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 ...

D'autres idées ?