C++ 将std::string转换为十六进制,然后将其存储在字节数组中

C++ 将std::string转换为十六进制,然后将其存储在字节数组中,c++,arrays,hex,C++,Arrays,Hex,这个问题可能有一个简单的答案。我相信我有一些工作代码,但我觉得有一个更好的解决方案 无论如何,这就是我面临的问题: 基本上,用户将一些数据输入终端,我的程序正在监视终端。重要的是要知道我没有使用cin,我知道可以很容易地将传入数据解释为十六进制。相反,我的程序使用的是适用于linux的conios.h的改编版本,并使用kbhit()。在用户决定提交之前,所有用户输入都存储为std::string 在这一点上,我必须将字符串解释为十六进制-但有一个小警告。我必须将此字符串保存在字符数组中 也就是说

这个问题可能有一个简单的答案。我相信我有一些工作代码,但我觉得有一个更好的解决方案

无论如何,这就是我面临的问题:

基本上,用户将一些数据输入终端,我的程序正在监视终端。重要的是要知道我没有使用
cin
,我知道可以很容易地将传入数据解释为十六进制。相反,我的程序使用的是适用于linux的conios.h的改编版本,并使用
kbhit()
。在用户决定提交之前,所有用户输入都存储为
std::string

在这一点上,我必须将字符串解释为十六进制-但有一个小警告。我必须将此字符串保存在字符数组中

也就是说,这就是我所拥有的:

     ...
     char bufferBytes[6144];
     std::string bufferString = "";
     ...

     for(i = 0; i < bufferString.length(); i = i+2)
     {
        bufferBytes[i] = (stoi(bufferString.at(i), 0, 16) << 4);
        bufferBytes[i] = (stoi(bufferString.at(i+1), 0, 16);    
     }
。。。
字符缓冲字节[6144];
std::string bufferString=“”;
...
对于(i=0;ibufferBytes[i]=(stoi(bufferString.at(i),0,16)这里有一个大概可以完成这项工作的粗略片段

  for (int i = 0; i < bufferString.length(); i += 2) {

    bufferBytes[i/2] = (bufferString[i] - '0') << 4;
    bufferBytes[i/2] |= bufferString[i+1] - '0';

  }
for(int i=0;ibufferBytes[i/2]=(bufferString[i]-'0')从哪里得到
6144
,为什么不检查这是否足以满足
bufferString
?问题是什么?这是一个任意大小的缓冲区(1024*6)。这不是一个最终用户程序…它是我正在与之交互的UART硬件设备的测试脚本,我知道事实上任何输入都不会超过6000字节。我将编辑我的帖子以使其更清晰。您当前的代码写入
bufferBytes[I]
两次,覆盖第一个值。我认为第二个实例应该是
缓冲字节[I+1]
。请注意
-“0”
=
[I/2]
部分。
    bufferBytes[i] = (bufferString[i] - '0') << 4;
    bufferBytes[i+1] = bufferString[i+1] - '0';