Forum: PC-Programmierung Packet-Decoder, C++ richtig bedienen,


von C-- (Gast)


Lesenswert?

Moin,

schreib gerade eine Lib (DLL) für Saleae Logic mit VS C++, funktioniert 
soweit. Kann meine Projekte compilieren und Saleae die DLL Integrieren.
Hab nur ein Problem:
Ich bekomme String (number_str) nicht nach Integer gewandelt, kommt 
immer 0 raus.
String steht eine Zahl, die kann ich so testen und es funktioniert:
1
U32 test = strcmp(number_str, "0x4F"); 
2
3
if (test == 0)
4
{
5
//ss << "Ich bin hier";
6
letzter_paket = 1;
7
}

Das Hier funktioniert nicht:
1
template<class T> T fromString(const std::string& s)
2
{
3
     std::istringstream stream (s);
4
     T t;
5
     stream >> t;
6
     return t;
7
}
8
9
crc_liste[0].crc_1 = fromString<int>(number_str);

Und mit atoi() geht nämlich auch nicht, kommt auch 0 raus:
1
crc_liste[0].crc_1 = atoi(number_str);

Was mache ich falsch?

Gruß

: Verschoben durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Du musst das 0x manuell abschneiden, und mit "stream >> std::hex >> t" 
auf hexadezimal stellen.

von Peter D. (peda)


Lesenswert?

Für Hex-Zahlen fällt mir nur ein:
1
sscanf(s,"%x",&a);

: Bearbeitet durch User
von C-- (Gast)


Lesenswert?

Niklas G. schrieb:
> Du musst das 0x manuell abschneiden, und mit "stream >> std::hex >> t"
> auf hexadezimal stellen.

Danke, es funktioniert!!!

von mh (Gast)


Lesenswert?

1
template<class T> T fromString(const std::string& s)
2
{
3
     std::istringstream stream (s);
4
     T t;
5
     stream >> std::hex >> t;
6
     return t;
7
}
https://en.cppreference.com/w/cpp/io/ios_base/fmtflags

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.