将char的向量转换为int

时间:2012-06-28 08:08:46

标签: c++ vector char

我需要将vector的{​​{1}}的一部分转换为char
如果我有

int

我想从第4位到第7位取字符并将其转换为int 这些职位总是众所周知的。

我如何以最快的方式做到这一点?

我尝试使用全局副本并获得了一个奇怪的答案。而不是2我得到48。

6 个答案:

答案 0 :(得分:3)

如果位置已知,您可以这样做

int x = (c[4] - '0') * 1000 + (c[5] - '0') * 100 + (c[6] - '0') * 10 + c[7] - '0';

答案 1 :(得分:2)

复制不起作用的原因可能是因为字节顺序,假设第一个char是最重要的:

int x = (int(c[4]) << 24) + (int(c[5]) << 16) + (int(c[6]) << 8) + c[7]

答案 2 :(得分:2)

这是相当灵活的,虽然它不检查溢出或类似的任何东西:

#include <algorithm>

int base10_digits(int a, char b) {
    return 10 * a + (b - '0');
}

int result = std::accumulate(myvec.begin()+4, myvec.begin()+8, 0, base10_digits);

答案 3 :(得分:1)

1.取开始和结束的地址(结束一个)索引。

2.从中构造一个std :: string。

3.将它转换为std :: istringstream。

4.将stringstream中的整数提取为变量。

(这可能是一个坏主意!)

答案 4 :(得分:0)

试试这个:

#include <iostream>
#include <vector>
#include <math.h>

using namespace std;

int vtoi(vector<char> vec, int beg, int end) // vector to int
{
  int ret = 0;
  int mult = pow(10 , (end-beg));

  for(int i = beg; i <= end; i++) {
    ret += (vec[i] - '0') * mult;
    mult /= 10;
  }
  return ret;
}

#define pb push_back

int main() {
  vector<char> vec;
  vec.pb('1');
  vec.pb('0');
  vec.pb('3');
  vec.pb('4');

  cout << vtoi(vec, 0, 3) << "\n";

  return 0;
}

答案 5 :(得分:-1)

long res = 0;

for(int i=0; i<vec.size(); i++)
{
     res += vec[i] * pow (2, 8*(vec.size() - i - 1)); // 8 means number of bits in byte
}