You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中如何将CSV文件内容转换为int16_t/int32_t类型?

把CSV数据转换为int16_t/int32_t的解决方案

没问题,我来帮你调整代码,把CSV里的数值转换成int16_t或者int32_t类型~

首先要明确:int16_t和int32_t是C++标准定义的固定宽度整数类型,需要包含<cstdint>头文件才能使用。接下来给你修改后的完整代码,以及需要注意的细节:

修改后的完整代码

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <cstdint>  // 必须包含这个头文件,才能使用int16_t/int32_t和对应的范围常量

using namespace std;

int main(int argc, const char * argv[]) {
    string line, csvItem;
    ifstream myfile("modifica1.csv");
    
    if (!myfile.is_open()) {
        cout << "无法打开目标文件" << endl;
        return 1;
    }

    while (getline(myfile, line)) {
        stringstream ss(line);
        // 按分号分割每一行的内容
        while (getline(ss, csvItem, ';')) {
            // 先把字符串转成int(作为中间值)
            int temp_val = stoi(csvItem);

            // 转换为int16_t(注意范围检查,避免溢出)
            if (temp_val >= INT16_MIN && temp_val <= INT16_MAX) {
                int16_t val_16 = static_cast<int16_t>(temp_val);
                // 这里替换成你的业务逻辑,比如存储到数组/容器里
                cout << "转换后的int16_t值: " << static_cast<int>(val_16) << endl;
            } else {
                cout << "警告:数值 " << temp_val << " 超出int16_t的范围(-32768 ~ 32767)" << endl;
            }

            // 转换为int32_t(通常int本身就是32位,所以直接赋值也安全,加static_cast更规范)
            int32_t val_32 = static_cast<int32_t>(temp_val);
            cout << "转换后的int32_t值: " << val_32 << endl;
        }
    }

    myfile.close();
    return 0;
}

关键注意点

  • 必须包含<cstdint>:这个头文件是标准库提供的,专门定义了int16_t、int32_t这类固定宽度整数,以及INT16_MIN、INT16_MAX这类范围常量。
  • 范围检查很重要:int16_t的取值范围是-32768到32767,如果CSV里的数值超出这个范围,直接强制转换会触发未定义行为(比如数值溢出后变成乱码),所以一定要先判断再转换。
  • 转换方式:先用stoi()把字符串转成普通int,再用static_cast转换成目标类型,这种方式比直接用stoi赋值更规范,也能避免隐式转换的潜在问题。

内容的提问来源于stack exchange,提问作者Iceknight

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:36:56