首页 > 解决方案 > 将字符串转换为 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 ..

标签: c++

解决方案


您的代码可以使用其他一些工作,但如果我理解正确的话,这个错误是因为您没有补偿 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[];. 我允许自己纠正它。


推荐阅读