c++ - 将字符串转换为 uint8_t 数组
问题描述
我有大小为 32 个字节的字符串 (key_str)。我想将每个字节存储在 uint8_t 数组元素键 [32] 中。我尝试了以下方法:
string key_str = "00001000200030004000500060007000";
uint32_t key[32] ;
uint8_t* k = reinterpret_cast <uint8_t*>(&key_str[0]);
for(int j = 0; j < 32; j++)
{
key[j]= *k;
k++;
cout<<bitset<8>(key[j])<<endl;
}
但输出的 MSB 4 位始终为 0011,因为表示字符 (0,1,...) 那么如何将其转换为整数?
输出样本:00110000 .. 00110001 .. 00110010 ..
解决方案
您的代码可以使用其他一些工作,但如果我理解正确的话,这个错误是因为您没有补偿 ASCII 字符值的偏移量'0'
。
试试这个(尽可能接近我发现坚持你的代码是合理的):
#include <string>
#include <iostream>
#include <bitset>
using namespace std;
int main()
{
string key_str = "00001000200030004000500060007000";
uint8_t key[32] ;
for (int j = 0; j < 32; j++)
{
key[j] = static_cast<uint8_t>(key_str[j] - '0');
cout << bitset<8>(key[j]) << endl;
}
return 0;
}
输出:
00000000
00000000
00000000
00000000
00000001
00000000
00000000
00000010
...
所以关于你的问题的关键是这里的减法'0'
:key[j] = static_cast<uint8_t>(key_str[j] - '0');
.
另外,如果你说
我想将每个字节存储在
uint8_t
数组元素中key[32]
那么也许你错误地将它定义为uint32_t key[32];
而不是uint8_t key[];
. 我允许自己纠正它。
推荐阅读
- angular - Angular:在html标签之前生成的脚本标签
- css - 如何使用渐变创建动画以填充整个按钮
- php - 问题可能在于使用 htaccess 缩短网址中的 url?
- angular - 将请求映射从 GET 更改为 POST 时,Spring 控制器不执行任何操作
- javascript - 无论html中的顺序如何,我如何解决div子级以覆盖剩余空间
- python-3.x - 如何获取检查元素 HTML Selenium
- javascript - 如何使用数组值作为函数参数的变量名从 JavaScript 中的数组创建表?
- html - 如何使二维码在显示大时呈现清晰?
- html - 为什么 flexbox 中的图像在不同浏览器中具有不同的高度?
- javascript - 无法在尚未使用事件侦听器挂载的组件上调用 setState