将十六进制值数组转换为十进制值数组

时间:2019-12-30 17:45:40

标签: c++

我有一个十六进制值{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数组中元素的索引语法错误。

感谢您的帮助!

1 个答案:

答案 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));
}

希望对您有所帮助。