Basic_string<unsigned char>::find nefunguje – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Basic_string<unsigned char>::find nefunguje – C / C++ – Fórum – Programujte.comBasic_string<unsigned char>::find nefunguje – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
yaqwsx+9
Posthunter
27. 10. 2011   #1
-
0
-

Mám pole unsigned char, které slouží jako příchozí buffer pro sériovou komunikaci. Příchozí data jsou binární. Je to sled instrukcí a dat. Každá instrukce přichází jako 3 byty - 0xAA, 0xAA a číslo instrukce (0-255); za ní podle typu instrukce následuje několik datových bytů. Na parsování této komunikace jsem použil třídu z STL basic_string<unsigned char>. Můj kód vypadá zhruba takto:

basic_string<unsigned char> data, pattern;
//nakopírování dat do data
//příprava vzoru pro hledání
pattern.push_back(0xAA);
pattern.push_back(0xAA);
pattern.push_back(instruction);
//hledání:
size_t pos;
if(pos = data.find(pattern) != basic_string<unsigned char>::npos)
{
	return pos + 3;//Vrátí index v poli
}

Tento kód mi však nefunguje. Když se podívám do obsahu proměnných v debuggeru, tak data má např. hodnotu {0xAA, 0xAA, 0x1, 0, 0, 0, 0, 0, 0, 0, 0, 0xAA, 0xAA, 0x2, 0x78}, pattern {0xAA, 0xAA, 0x2}. Jenže metoda find mi vrací 1, přestože by měla vracet 11...

Kde dělám chybu/co mám špatně?

Nahlásit jako SPAM
IP: 85.160.96.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Řešení
liborb
~ Redaktor
+18
Guru
27. 10. 2011   #2
-
+1
-
Zajímavé
Vyřešeno Nejlepší odpověď

A není v pos náhodou jenom TRUE: 

if((pos = data.find(pattern)) != basic_string<unsigned char>::npos)
Nahlásit jako SPAM
IP: 78.80.52.–
yaqwsx+9
Posthunter
27. 10. 2011   #3
-
0
-

Taková blbá chyba z nepozornosti.... Díky za pomoc.

Nahlásit jako SPAM
IP: 85.160.96.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 71 hostů

Podobná vlákna

Unsigned char — založil oxidián

Base64 bez unsigned char — založil etrix

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý