У меня есть строка, и я хочу напечатать шестнадцатеричное значение каждого элемента ascii кода. например, если строка "0200", выход будет 30323030
.
и вот мой код:
string bit_pattern;
bit_pattern = "5678008180000000";
cout << hex << bit_pattern;
но он печатает 5678008180000000
вместо 35363738303038313830303030303030
как я его исправить???
Вы можете использовать следующие
for (int i=0; i<bit_pattern.length(); i++)
cout << hex << (int)bit_pattern[i];
для печати символа ascii (в шестнадцатеричном формате) char.
Вы просто отправляете ту же std::string
прямо в std::cout
. Просто отправка hex
манипулятора не собирается магически преобразовывать все эти символы.
Я признаю, что это полный перебор, но мне было скучно:
#include <iostream>
#include <string>
#include <iomanip>
#include <sstream>
class ascicodes
{
std::ostringstream ss;
public:
friend std::ostream& operator <<(std::ostream& os, const ascicodes& obj)
{
os << obj.ss.str();
return os;
}
ascicodes(const std::string& s)
{
ss << std::hex << std::setfill('0');
std::for_each(s.begin(), s.end(),
[this](char ch)
{
ss << std::setw(2) << static_cast<unsigned int>(ch);
});
}
};
int main()
{
std::string bit_pattern = "5678008180000000";
std::cout << ascicodes(bit_pattern) << std::endl;
std::cout << ascicodes("A completely different string") << std::endl;
return 0;
}
Вывод
35363738303038313830303030303030
4120636f6d706c6574656c7920646966666572656e7420737472696e67
char
в строке преобразуйте вunsigned int
иcout
сhex
манипуляцией.