这个问题可能很简单。我相信我有一些工作代码,但我觉得有更好的解决方案。
无论如何,这是我遇到的问题:
基本上用户将一些数据输入终端,我的程序正在监控终端。重要的是要知道我没有使用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 :: string,直到用户决定提交它。此时,我需要将此std :: string解释为十六进制数字并将它们存储在字符数组中。我相信我上面的代码会起作用,但是有更好/更有效的方式来做我所描述的。
答案 0 :(得分:0)
这是一个粗略的片段,可能会完成这项工作。
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';