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.
Warum das C-Tag dann? –
Sie müssen nur eine Zeichenfolge, die Hexadezimalbytes darstellt, in das dargestellte Bytearray konvertieren. Google weiß, wie es geht. –
Ist das wirklich eine String-String-Frage, oder möchten Sie vielleicht den ganzzahligen Wert, den die Zeichenfolge angibt? –