conversion to int16_t c++

conversion to int16_t c++

本文关键字:c++ int16 to conversion      更新时间:2023-10-16

我将旧帖子删除更为精确。我正在使用C 。我有一个CSV;作为分离器。使用以下代码,我读了一行,然后读取了行的所有元素,然后将它们转换为int。我的问题是我需要将它们转换为INT16_T或INT32_T。代码是:

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
using namespace std;
int main (int argc, const char * argv[]) {
    string line, csvItem;
    ifstream myfile ("modifica1.csv");
    int lineNumber = 0;
    int lineNumberSought = 7462;
    if (myfile.is_open()) {
        while (getline(myfile,line)) {
            lineNumber++;
            if(lineNumber == lineNumberSought) {
                istringstream myline(line);
        string bus1s;
        string bus2s;
        string bus3s;
        string bus4s;
        string bus5s;
        string bus6s;
        string bus7s;
        string bus8s;
        string bus9s;
        getline(myline,bus1s,';');
        getline(myline,bus2s,';');
        getline(myline,bus3s,';');
        getline(myline,bus4s,';');
        getline(myline,bus5s,';');
        getline(myline,bus6s,';');
        getline(myline,bus7s,';');
        getline(myline,bus8s,';');
        getline(myline,bus9s,'n');

        int bus1;
        int bus2;
        int bus3;
        int bus4;
        int bus5;
        int bus6;
        int bus7;
        int bus8;
        int bus9;
        bus1=stoi(bus1s);
        bus2=stoi(bus2s);
        bus3=stoi(bus3s);
        bus4=stoi(bus4s);
        bus5=stoi(bus5s);
        bus6=stoi(bus6s);
        bus7=stoi(bus7s);
        bus8=stoi(bus8s);
        bus9=stoi(bus9s);
            }
        }
        myfile.close();
    }
    return 0;
}

这是如何将CSV文件(带有任何分离器(解析为tuple S的vector

的示例
#include <sstream>
#include <vector>
#include <string>
#include <tuple>
#include <boost/lexical_cast.hpp>
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string/trim.hpp>
template<class... ColumnTypes>
class CsvRowParser
{
    char const separator_;
    template<size_t... Idxs>
    std::tuple<ColumnTypes...>
    convert_csv_row(std::vector<std::string> const& columns, std::integer_sequence<size_t, Idxs...>) {
        return std::tuple<ColumnTypes...>{boost::lexical_cast<ColumnTypes>(boost::algorithm::trim_copy(columns[Idxs]))...};
    }
public:
    using RowType = std::tuple<ColumnTypes...>;
    CsvRowParser(char separator)
        : separator_(separator)
    {}
    RowType parse_row(std::string const& csv_row) {
        std::vector<std::string> columns;
        boost::algorithm::split(columns, csv_row, [this](char c) { return c == separator_; });
        if(columns.size() != sizeof...(ColumnTypes))
            throw std::runtime_error("Invalid csv row: " + csv_row);
        return convert_csv_row(columns, std::make_index_sequence<sizeof...(ColumnTypes)>{});
    }
};
int main() {
    std::string my_csv;
    my_csv += "abc, 1, 1.1n";
    my_csv += "def, 2, 2.2n";
    std::istringstream s(my_csv);
    using Parser = CsvRowParser<std::string, int, double>;
    Parser parser(',');
    std::vector<Parser::RowType> rows;
    for(std::string line; getline(s, line);)
        rows.push_back(parser.parse_row(line));
}