gpt4 book ai didi

c++ - 将字符串转换为 uint8_t 数组

转载 作者:太空狗 更新时间:2023-10-29 21:10:59 37 4
gpt4 key购买 nike

我有 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' 的 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'); .

另外,如果你说

I want to store each bytes in uint8_t array element key[32]

那么您可能错误地将其定义为 uint32_t key[32];而不是 uint8_t key[]; .我允许自己纠正它。

关于c++ - 将字符串转换为 uint8_t 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52053046/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com