我有大小为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;
}
但是由于字符(0,1,...)的表示,输出的MSB 4位始终为0011,那么如何将其转换为整数?
输出样本: 00110000 .. 00110001 .. 00110010 ..
答案 0 :(得分:3)
您的代码可能还会使用其他工作,但如果我理解正确的话,该错误是因为您无法补偿'0'
的ASCII字符值的偏移量。
尝试一下(据我所知,坚持使用您的代码是合理的):
#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[];
。我已允许自己更正。