将字符串转换为uint8_t数组

时间:2018-08-28 08:09:54

标签: c++

我有大小为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 ..

1 个答案:

答案 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[];。我已允许自己更正。