我正在开发一个使用RFID读写器(cr500)的项目
我遇到了如何将字符串"FFFFFFFFFFFF"
转换为"\xFF\xFF\xFF\xFF\xFF\xFF"
这
string key = "FFFFFFFFFFFF";
到
string raw = "\xFF\xFF\xFF\xFF\xFF\xFF";
如何使用c ++标准库函数解决这个问题?
答案 0 :(得分:1)
好吧,我会从字面上理解您的问题并专注于如何将字符文字"FFFFFFFFFFFF"
转换为"\xFF\xFF\xFF\xFF\xFF\xFF"
的目标字面值,因为您要求(双关语)意)。
以这种方式 1 来实现您所寻找的目标:
#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;
}
输出:
FF
FF
FF
FF
FF
FF
\xff\xff\xff\xff\xff\xff
请参阅Live Demo
您可以使用std::setw()
控制输入字段宽度,如上所示。
注意:
这显然适用于std::string
,但不能直接使用unsigned u;
指定std::setw(2)
:
#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;
}
<子>
1.您还可以在循环中使用std::string::substr()
拆分输入字符串。
子>