Compter-ASCII charcaters non dans la chaîne

G

glenjoy

Guest
J'ai un problème de savoir si le nombre ou la non-ASCII de caractères ASCII il est dans une certaine chaîne de caractères, comme je l'ai remarqué que strlen () ne compte que des caractères ASCII et s'arrête sur un NULL, donc si il ya un NULL entre mon tableau, elle sera arrêtez de compter et laissera la séquence.

Y at-il une commande que je connais pas la longueur ou le nombre d'ASCII ou non-ASCII chracter l'intérieur d'un tableau?

Merci.Ajouté après 13 minutes:Code:(

unsigned char x;

unsigned char de données [] = ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',);

unsigned char data_1 [] = ("ABCDEFGHI");/ / Résultats

printf ("% d", strlen (data)); / / ----> 18

printf ("% d", strlen (data_1)); //-----> 9printf ("% d SF", sizeof (data)); //-----> 9

printf ("% d SF", sizeof (data_1)); //----> 10

)
 
Une chaîne de caractères et un tableau de caractères sont deux choses différentes.

Par définition, une chaîne C se termine par NULL.Il n'y a pas intégré dans la valeur de longueur.Si vous percez un caractère NULL dans le milieu d'une chaîne, vous ont effectivement réduit la chaîne.

strlen () nécessite un pointeur vers une chaîne.Il compte les caractères jusqu'à ce qu'il trouve un terminateur NULL.Si vous lui donnez un pointeur vers autre chose, vous obtenez un comportement non défini (la valeur 18 que vous avez déclarés).

Vous avez défini les tableaux unsigned char, de sorte que vous et le compilateur connaître leurs tailles.L'opérateur sizeof donne la taille du tableau en octets.

Plus d'infos à partir de l'excellente FAQ comp.lang.c:
http://www.eskimo.com/ ~ scs/C-faq/s8.html

 
J'ai eu un problème similaire.Tout à l'heure j'ai eu à insérer un flux d'octets à partir d'un lecteur d'empreintes digitales pour une base de données (type de champ = texte) dans mon PC.Si je viens de l'insérer à l'aide de type de données chaîne, il ne fonctionne pas bien car il ya de nombreuses 0x00 dans le flux de données.Le tableau figurant à la base de données stocker la chaîne de manière incomplète.

Ma solution était de les convertir tous à l'aide du protocole ASCII TLP (je me suis inspiré de Gemplus).Fondamentalement, un 0x00 serait traduit en «00» (deux caractères), et un 0x1a sera traduite en "1A", par exemple.

Mais heureusement la longueur (s: string): la fonction d'entier dans Delphi fonctionne bien malgré les caractères nuls à l'intérieur: p!(Comment ça se fait, je ne sais

<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" />

)

 
C'est parce que Delphi ne pas utiliser de chaînes à zéro terminal.Ses cordes ont deux parties, les données de chaîne et de la durée (nombre de caractères dans la chaîne).

 

Welcome to EDABoard.com

Sponsor

Back
Top