将std::string转换为十六进制,然后将其存储在字节数组中
Converting std::string into hex, and then storing it in a byte array
这个问题可能有一个简单的答案。我相信我有一些工作代码,但我觉得有一个更好的解决方案。
无论如何,这就是我遇到的问题:
基本上,用户将一些数据输入到终端,而我的程序正在监视终端。重要的是要知道我没有使用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';
相关文章:
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 为什么 bool 和 _Bool 如果它们在内存中占用 1 个字节,它们只能存储 0 或 1
- 如何在 XML 中正确存储原始字节数据并恢复它?
- 哪些值存储在对齐的结构/类对象的填充字节中
- 如何使用连接器 c++ 在 mySQL 表二进制(16) 字段中存储 c++ 字节数组?
- 使用字节向量作为其他类型的原始存储是一种好的做法吗
- 将十六进制字符数组存储在字节数组中,而无需更改为 ASCII 或其他任何东西
- 比较存储在 std::string 中的数据中的字节数
- 是否值得使用位移在单个字节中存储多个小数据成员?
- 为什么当我使用双精度时,Qt<->Matlab 正确写入和读取我的字节,但存储 uint32 的字节不正确?
- 一个对象什么时候可以有非零大小的一个,但不能同时具有一个或多个字节的存储
- C++如何从文件中读取十六进制字节并将其存储为指针
- 我如何将整数转换为存储在字符阵列中的十六进制字节
- 将Protobuf字节类型存储在二进制文件中
- 您可以在Arduino字符串中存储多少字节?
- 在 c++ 中存储字节模式
- C++:了解我的计算机如何存储字节
- 如何使用节俭C++ API 在 HBase 中存储字节数组(突变结构中的值是文本 ..)
- 编译lua代码,存储字节码,然后加载并执行它
- 为什么 file.write() 不按照我给出的顺序存储字节?C++