如何从vector <char>转换为数字整数

时间:2019-07-08 21:01:26

标签: c++ visual-c++ char type-conversion stdvector

我有一个向量,该向量来自用户输入60,000的['6''0''0''0''0']。我需要一个整数60000,以便可以操纵此数字。

我一般都不熟悉c ++和编程。我从串行端口读取了60,000-3,500,000的数据/数字,我需要一个整数,成功完成此操作并打印出来的唯一方法是通过std :: vector。 我尝试做向量,但它给了我一些时髦的数字。

#include "SerialPort.h"
std::vector<char> rxBuf(15);
DWORD dwRead;
while (1) {
  dwRead = port.Read(rxBuf.data(), static_cast<DWORD>(rxBuf.size()));
  // this reads from a serial port and takes in data
  // rxBuf would hold a user inputted number in this case 60,000
  if (dwRead != 0) {
    for (unsigned i = 0; i < dwRead; ++i) {
      cout << rxBuf[i];
      // this prints out what rxBuf holds
    }
    // I need an int = 60,000 from my vector holding [ '6' '0' '0' '0 '0']
    int test = rxBuf[0 - dwRead];
    cout << test;
    // I tried this but it gives me the decimal equivalent of the character
    numbers
  }
}

我需要60000的输出而不是向量,而是一个整数,谢谢您的帮助。

5 个答案:

答案 0 :(得分:8)

在此answer中,您可以执行以下操作:

std::string str(rxBuf.begin(), rxBuf.end());

要将Vector转换为字符串。

之后,您可以使用std::stoi函数:

int output = std::stoi(str);
    std::cout << output << "\n";

答案 1 :(得分:5)

环绕std::vector的元素并根据它们构造int

std::vector<char> chars = {'6', '0', '0', '0', '0'};

int number = 0;

for (char c : chars) {
    number *= 10;
    int to_int = c - '0'; // convert character number to its numeric representation
    number += to_int;
}

std::cout << number / 2; // prints 30000

答案 2 :(得分:3)

使用std :: string构建您的字符串:

std::string istr;
char c = 'o';
istr.push_back(c);

然后使用std :: stoi转换为整数; std::stoi

int i = std::stoi(istr);

答案 3 :(得分:3)

C ++ 17添加了std::from_chars函数,该函数可以执行您想要的操作而无需修改或复制输入向量:

std::vector<char> chars = {'6', '0', '0', '0', '0'};
int number;
auto [p, ec] = std::from_chars(chars.data(), chars.data() + chars.size(), number);
if (ec != std::errc{}) {
    std::cerr << "unable to parse number\n";
} else {
    std::cout << "number is " << number << '\n';
}

Live Demo

答案 4 :(得分:2)

为了最大限度地减少对临时变量的需求,请使用长度合适的std::string作为缓冲区。

#include "SerialPort.h"
#include <string>

std::string rxBuf(15, '\0');
DWORD dwRead;

while (1) {
    dwRead = port.Read(rxBuf.data(), static_cast<DWORD>(rxBuf.size()));

    if (dwRead != 0) {
        rxBuf[dwRead] = '\0'; // set null terminator
        int test = std::stoi(rxBuf);
        cout << test;
    }
}