Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用十六进制表示法将数据输入到stringstream_C++_Char_Stringstream_Crypto++_Iomanip - Fatal编程技术网

C++ 使用十六进制表示法将数据输入到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

我试图通过stringstream提取十六进制的哈希摘要,但在对数据进行迭代时无法使其工作

使用
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>>数据
可能?我试过,但都不起作用。这正是我要找的!非常感谢好先生!这正是我要找的!非常感谢好先生!