C++ 使用十六进制表示法将数据输入到stringstream
我试图通过stringstream提取十六进制的哈希摘要,但在对数据进行迭代时无法使其工作 使用C++ 使用十六进制表示法将数据输入到stringstream,c++,char,stringstream,crypto++,iomanip,C++,Char,Stringstream,Crypto++,Iomanip,我试图通过stringstream提取十六进制的哈希摘要,但在对数据进行迭代时无法使其工作 使用std::hex我可以很容易地使用普通整数文本来实现这一点,如下所示: #include <sstream> #include <iostream> std::stringstream my_stream; my_stream << std::hex; my_stream << 100; std::cout << my_stream.s
std::hex
我可以很容易地使用普通整数文本来实现这一点,如下所示:
#include <sstream>
#include <iostream>
std::stringstream my_stream;
my_stream << std::hex;
my_stream << 100;
std::cout << my_stream.str() << std::endl; // Prints "64"
#include <iomanip>
...
buffer << std::hex << std::setfill('0') << std::setw(2);
for (size_t i = 0; i < SHA256::DIGESTSIZE; i++) {
buffer << static_cast<int>(*(digest+i));
}
首先,
std::hex
格式修饰符应用于整数,而不是字符。由于您正试图打印无符号字符
,因此未应用格式修饰符。您可以通过强制转换为int
来解决此问题。在第一个示例中,它之所以有效,是因为文本100
被解释为整数。如果将100
替换为例如static\u cast(100)
,则将不再获得十六进制表示形式
其次,std::hex
是不够的,因为您可能希望将每个字符填充为2位十六进制值(即F
应打印为0F
)。您还可以通过应用格式修饰符std::setfill('0')
和std::setw(2)
(,)来解决此问题
应用这些修改后,您的代码将如下所示:
#include <sstream>
#include <iostream>
std::stringstream my_stream;
my_stream << std::hex;
my_stream << 100;
std::cout << my_stream.str() << std::endl; // Prints "64"
#include <iomanip>
...
buffer << std::hex << std::setfill('0') << std::setw(2);
for (size_t i = 0; i < SHA256::DIGESTSIZE; i++) {
buffer << static_cast<int>(*(digest+i));
}
#包括
...
buffer首先,std::hex
格式修饰符应用于整数,而不是字符。由于您正试图打印无符号字符
,因此未应用格式修饰符。您可以通过强制转换为int
来解决此问题。在第一个示例中,它之所以有效,是因为文本100
被解释为整数。如果将100
替换为例如static\u cast(100)
,则将不再获得十六进制表示形式
其次,std::hex
是不够的,因为您可能希望将每个字符填充为2位十六进制值(即F
应打印为0F
)。您还可以通过应用格式修饰符std::setfill('0')
和std::setw(2)
(,)来解决此问题
应用这些修改后,您的代码将如下所示:
#include <sstream>
#include <iostream>
std::stringstream my_stream;
my_stream << std::hex;
my_stream << 100;
std::cout << my_stream.str() << std::endl; // Prints "64"
#include <iomanip>
...
buffer << std::hex << std::setfill('0') << std::setw(2);
for (size_t i = 0; i < SHA256::DIGESTSIZE; i++) {
buffer << static_cast<int>(*(digest+i));
}
#包括
...
缓冲区>std::hex>>数据
可能?我试过,但都不起作用。>std::hex>>数据
可能?我试过,但都不起作用。这正是我要找的!非常感谢好先生!这正是我要找的!非常感谢好先生!