1、--------起初需要将数据转换为16进制并以字符串返回,如下:-----------
#include <iostream>
#include <string>
#include <sstream>
std::string stringToHex(const std::string& input) {
std::stringstream ss;
ss << std::hex;
// 将每个字符转换为对应的16进制表示,并拼接到结果字符串中
for (size_t i = 0; i < input.length(); ++i) {
ss << static_cast<int>(static_cast<unsigned char>(input[i]));
}
return ss.str();
}
2、-------但是对比转换后数值和内存中的数值,发现会有少0的情况,如下:-------------
内存中数值:60185f010430
转换后数值:60185f1430
3、-------修改--------
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
std::string stringToHex(const std::string& input) {
std::stringstream ss;
ss << std::hex << std::uppercase;
// 将每个字符转换为对应的16进制表示,并拼接到结果字符串中
for (size_t i = 0; i < input.length(); ++i) {
ss << setfill('0') << setw(2)<< static_cast<int>(static_cast<unsigned char>(input[i]));
}
return ss.str();
}
转换后数值:60185F010430
4、-------总结:stringstream的使用-------
stringstream 中std::hex std::uppercase std::setw( ) std::setfill( )的作用分别是什么
1. std::hex:将流中的整数以十六进制形式输出。当设置了std::hex标志后,流中的整数将被视为十六进制,并以相应的格式进行输出。
例如:
```cpp
int num = 255;
std::stringstream ss;
ss << std::hex << num;
std::cout << ss.str(); // 输出 ff
```
2. std::uppercase:将十六进制数字的字母部分大写。当设置了std::uppercase标志后,在输出流中的十六进制数字中,字母部分(A-F)将被强制转换为大写形式。
例如:
```cpp
int num = 10;
std::stringstream ss;
ss << std::hex << std::uppercase << num;
std::cout << ss.str(); // 输出 A
```
3. std::setw(2):用于设置输出宽度,输出宽度为2。
4. std::setfill('0'):设置在需要时用0填充。
注释:使用3、4时需要引用头文件 #include <iomanip>
1745

被折叠的 条评论
为什么被折叠?



