Počítání Non-ASCII charcaters v řetězci

G

glenjoy

Guest
Mám problém, vědět, zda, kolik ASCII nebo non-ASCII znaků je v určitém řetězci, jak jsem si všiml, že strlen () pouze počty ASCII znaky a zastávek na NULL, takže pokud tam je NULL mezi moje pole, bude to zastaví počítání a opustí sekvence.

Je tam příkaz, že budu vědět, délku nebo počet ASCII nebo non-ASCII chracter uvnitř pole?

Díky.Přidáno po 13 minutách:Kód:(

unsigned char x;

unsigned char data [] = ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I');

unsigned char data_1 [] = ("ABCDEFGHI");/ / Výsledky

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

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

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

)
 
Řetězce a pole znaků jsou dvě různé věci.

Podle definice, řetězec C končí s NULL.Neexistuje žádný vestavěný délkou hodnoty.Pokud jste poke NULL znak do středu řetězce, pak máte skutečně zkrátit řetězec.

strlen () vyžaduje ukazatel na řetězec.To se počítá znaky, až zjistí, NULL terminátor.Máte-li dát odkaz na něco jiného, dostanete nedefinované chování (hodnota 18 vám hlášeny).

Ty podle těchto unsigned char pole, takže je i překladač znát jejich velikosti.Sizeof operátor vám velikost pole v bajtech.

Více informací z vynikající comp.lang.c FAQ:
http://www.eskimo.com/ ~ scs/C-faq/s8.html

 
Měl jsem podobný problém.Právě teď jsem musel vložit proud bytů od čtečky otisků prstů do databáze (pole type = text), v mém PC.Pokud se i jen vložit pomocí řetězce datový typ, nebude to fungovat dobře, protože tam jsou 0x00 je mnoho v datovém toku.V tabulce v databázi se bude ukládat řetězec neúplně.

Moje řešení bylo převést všechny do ASCII pomocí protokolu TLP (mám inspirován Gemplus).V podstatě, 0x00 by být přeloženy do "00" (dva znaky), a 0x1a budou přeloženy na "1a", například.

Ale naštěstí délka (s: string): integer funkce v Delphi funguje dobře i přes null znaky uvnitř: p!(Jak to, nevím

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

)

 
To proto, že Delphi nepoužívá NULL-ukončení řetězce.Jeho struny mají dvě části, řetězec data a délku (počet znaků v řetězci).

 

Welcome to EDABoard.com

Sponsor

Back
Top