1

vectorsのcharsの一部をに変換する必要がありintます。
私が持っている場合

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

そして、4番目から7番目の位置の文字を取得してintに変換したいと思います。
位置は常にわかっています。

どうすれば最速の方法でそれを行うことができますか?

グローバルコピーを使おうとすると、奇妙な答えが返ってきました。2の代わりに私は48を得ました。

4

6 に答える 6

3

位置がわかっている場合は、このように行うことができます

int x = (c[4] - '0') * 1000 + (c[5] - '0') * 100 + (c[6] - '0') * 10 + c[7] - '0';
于 2012-06-28T08:22:00.507 に答える
3

これはかなり柔軟性がありますが、オーバーフローやそのような派手なものはチェックしません。

#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);
于 2012-06-28T08:43:09.410 に答える
2

コピーが機能しなかった理由は、最初charのものが最も重要であると仮定すると、おそらくエンディアンが原因です。

int x = (int(c[4]) << 24) + (int(c[5]) << 16) + (int(c[6]) << 8) + c[7]
于 2012-06-28T08:16:12.273 に答える
1

1.開始および終了(終了の1つ後)インデックスのアドレスを取得します。

2.そこからstd::stringを構築します。

3.それをstd::istringstreamにフィードします。

4.stringstreamから変数に整数を抽出します。

(これは悪い考えかもしれません!)

于 2012-06-28T08:11:37.923 に答える
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;
}
于 2012-06-28T16:37:20.323 に答える
-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
}
于 2017-03-30T09:16:09.420 に答える