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

Converting std::string into hex, and then storing it in a byte array

本文关键字:存储 字节 字节数 数组 string std 转换 十六进制 然后      更新时间:2023-10-16

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

无论如何,这就是我遇到的问题:

基本上,用户将一些数据输入到终端,而我的程序正在监视终端。重要的是要知道我没有使用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);    
     }

我相信这会奏效,但我觉得可能有更好的解决方案。

任何意见都将不胜感激。

编辑:

假设用户输入0123456789ABCDEF。在用户决定提交之前,它一直存储为std::字符串。此时,我需要将此std::string解释为十六进制数字,并将其存储在字符数组中。我相信我上面的代码会起作用,但有没有更好/更有效的方法来完成我所描述的。

这里有一个可能完成任务的粗略片段。

  for (int i = 0; i < bufferString.length(); i += 2) {
    bufferBytes[i/2] = (bufferString[i] - '0') << 4;
    bufferBytes[i/2] |= bufferString[i+1] - '0';
  }

如果您打算将每个十六进制数字存储为自己的char元素,那么这应该是循环的主体:

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