convert vector of char to an int

2019-09-20 06:39发布

问题:

I need to convert a part of vectors of chars to an int.
If I have

std::vector<char> // which contains something like asdf1234dsdsd  

and I want to take characters from the 4th till 7th position and convert it into an int.
The positions are always known.

How do I do it the fastest way ?

I tried to use global copy and got a weird answer. Instead of 2 I got 48.

回答1:

If the positions are known, you can do it like this

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


回答2:

The reason copying didn't work is probably because of endianness, assuming the first char is the most significant:

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


回答3:

This is fairly flexible, although it doesn't check for overflow or anything fancy like that:

#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);


回答4:

1.Take the address of the begin and end (one past the end) index.

2.Construct a std::string from it.

3.Feed it into a std::istringstream.

4.Extract the integer from the stringstream into a variable.

(This may be a bad idea!)



回答5:

Try this:

#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;
}


回答6:

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
}


标签: c++ vector char