c++转换数据为16进制以及转换后数据少0问题

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>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值