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
相关产品推荐
相关产品推荐

