我有一个十六进制值{74, 65, 74, 74}
的char数组。
我想将转换后的char数组的矢量转换为十进制数字:
std::vector<unsigned char> array;
for (unsigned char i = 0; i <= 3; i++) {
array.push_back(((buffer[i][1])*(pow(16, 0)))+((buffer[i][0])*(pow(16, 1))));
}
我的转换想法是:4 (index 1 of 74) * (16^0) + 7 (index 0 of 74) * (16^1) = 116
。
意思是74 hex = 116 dec
。
但这不起作用。
error: invalid types ‘char[int]’ for array subscript
我认为访问char数组中元素的索引语法错误。
感谢您的帮助!
答案 0 :(得分:0)
另一种方法是使用stoi
。借助to_string
,您可以向其传递未签名的字符,并指定其基数,以便正确地对其进行转换。您可以在内部执行以下操作,而不必循环:
// make sure to include the string header
// 16 denotes the base
int dec = std::stoi(std::to_string(buffer[i]), nullptr, 16);
然后您可以执行以下操作:
// you probably want a vector of ints because we are converting to decimal
std::vector<int> array;
for(char ch: buffer)
{
array.push_back(std::stoi(std::to_string(ch), nullptr, 16));
}
在c ++中,您不能为字符编制索引以单独访问其数字。这就是为什么在代码中出现错误的原因。访问字符的方法是使用除法和模运算,如下所示:
int first_digit = character / 100; // if the number is 123, this isolates the 1
int second_digit = (character % 100) / 10; // removes the first digit and then isolates the 2 in 123
int third_digit = character % 10; // isolates the last digit of 123, 3
使用此方法将如下所示:
std::vector<int> array;
for(char ch: buffer) // or for(int i = 0; i < buffer.size(); ++i) with ch being buffer[i]
{
array.push_back(((ch / 10)*16) + (ch%10));
}
希望对您有所帮助。