2016-05-02 14 views
-3

ich an einem Projekt arbeite, wo ich verwende, um eine RFID-Leser/Schreiber (CR500)Wie kann man Byte-Werte im Hex-Format aus einer Zeichenfolge mit C++ abrufen?

bekam ich ein Problem auf, wie meine Zeichenfolge "FFFFFFFFFFFF"-"\xFF\xFF\xFF\xFF\xFF\xFF"

von

string key = "FFFFFFFFFFFF"; 

zu

konvertieren

Wie kann dies mit C++ Standard-Bibliotheksfunktionen gelöst werden?

+0

Warum das C-Tag dann? –

+0

Sie müssen nur eine Zeichenfolge, die Hexadezimalbytes darstellt, in das dargestellte Bytearray konvertieren. Google weiß, wie es geht. –

+0

Ist das wirklich eine String-String-Frage, oder möchten Sie vielleicht den ganzzahligen Wert, den die Zeichenfolge angibt? –

Antwort

1

Nun, ich nehme Ihre Frage wörtlich und konzentriere mich darauf, wie Sie vom Zeichenliteral "FFFFFFFFFFFF" in den Zielliteralwert von "\xFF\xFF\xFF\xFF\xFF\xFF" konvertieren, wie Sie verlangen (Wortspiel beabsichtigt).

Hier ist eine Art und Weise zu erreichen, was Sie suchen:

#include <iostream> 
#include <string> 
#include <sstream> 
#include <iomanip> 

int main() 
{ 
    std::string input = "FFFFFFFFFFFF"; // << Let's suppose this is given from the GUI 
    std::istringstream iss(input); 
    std::string output; 
    std::string sbyte; 
    while(iss >> std::setw(2) >> sbyte) { 
     std::cout << sbyte << std::endl; 
     std::istringstream iss2(sbyte); 
     unsigned u; 
     iss2 >> std::hex >> u; 
     output += (unsigned char)u; 
    } 

    // std::string::data() contains the resulting byte values: 
    for(unsigned char x : output) { 
     std::cout << std::hex << "\\x" << std::setw(2) << std::setfill('0') 
        << (unsigned)x; 
    } 
    std::cout << std::endl; 
} 

Ausgang:

FF 
FF 
FF 
FF 
FF 
FF 
\xff\xff\xff\xff\xff\xff 

Siehe Live Demo

Sie können die Eingabefeldbreite steuern std::setw() mit wie oben gezeigt.


Hinweis:

Dies funktioniert offenbar mit std::string, aber nicht unsigned u; direkt mit einer ehemaligen std::setw(2) Direktive:

#include <iostream> 
#include <string> 
#include <sstream> 
#include <iomanip> 

int main() 
{ 
    std::string input = "FFFFFFFFFFFF"; 
    std::istringstream iss(input); 
    std::string output; 
    unsigned u; 
    while(iss >> std::setw(2) >> std::hex >> u) { 
     std::cout << std::hex << std::setw(2) << std::setfill('0') << u << std::endl; 
     output += (unsigned char)u; 
    } 

    for(unsigned char x : output) { 
     std::cout << std::hex << "\\x" << std::setw(2) << std::setfill('0') 
        << (unsigned)x; 
    } 
    std::cout << std::endl; 
} 

Live Demo


1. Sie können Ihre Eingabezeichenfolge auch unter Verwendung von std::string::substr() in einer Schleife aufteilen.

+1

vielen Dank. und ich denke eine Lösung: std :: string key = ""; für (int i = 0; i

Verwandte Themen