c++ - 将长十六进制字符串解析为单独的字节并将其存储在 std::vector<unit_8> 中

标签 c++ string vector hex

我尝试使用 CPP 程序将长十六进制字符串拆分为单独的字节并将其存储在整数 vector 中。例如,我的输入字符串将类似于 09e1c5f70a65ac519458e7e53f36,我的预期输出将类似于 09 e1 c5 f7....。但我得到的输出类似于 0 e c f.....。我只得到了一半的字节值。我已经引用了此链接以供引用([https://stackoverflow.com/questions/21365364/how-to-split-a-hex-string-into-stdvector]),我想在不使用 boost 库的情况下获得输出.

因此,我尝试了上面链接中提到的以下代码。

这是我的代码。

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <iomanip>

int main(void)
{
    std::string in("09e1c5f70a65ac519458e7e53f36");
    size_t len = in.length();
    std::vector<uint8_t> out;
    for(size_t i = 0; i < len; i += 2) {
        std::istringstream strm(in.substr(i, 2));
        uint8_t x;

        strm >> std::hex >> x;
        out.push_back(x);

    }
    for (int i=0; i<out.size(); ++i)
    std::cout << out[i] << ' ';

    return 0;
}

我的预期输出将类似于 std::vector out = {09,e1,c5,f7,0a,65,ac,51,94,58,e7,e5,3f,36}

最佳答案

本声明

strm >> std::hex >> x;

只能读取一个字符。

您可以将变量x声明为例如类型uint16_t

    uint16_t x;

    strm >> std::hex >> x;
    out.push_back(x);

并输出您可以编写的 vector 的元素

std::cout << std::setfill( '0' ) << std::setw( 2 ) << std::hex << ( uint16_t )out[i] << ' ';        

关于c++ - 将长十六进制字符串解析为单独的字节并将其存储在 std::vector<unit_8> 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77096658/

相关文章:

c++ - 请解释为什么这些逻辑运算符在 CPP 中没有正常工作

c++ - 适用于 C++ Windows 7 64 位 PC 的 Eclipse

c++ - 我怎么知道我的数组在缓存中?

c++ - 排序 vector 以将偶数和奇数 fork

c++ - vector 和原始 C 风格数组之间的性能比较

c++ - 静态 vector 不保存数据?

c++ - 在 C++ 中使用无序 _map 将整数转换为字符

python - 如何计算一个序列在 python 中的给定字符串中出现了多少次?

c# - 使用复杂分隔符/分隔符标记字符串并将分隔符/分隔符保留为 C# 中的标记的有效方法

c# - 拆分成一个数组