You need to enable JavaScript to run this app. int强转为char存入vector后控制台输出不可见如何解决
优惠活动
大模型
产品
解决方案
定价
更多

int强转为char存入vector后控制台输出不可见如何解决

问题根因

你强转的int值为5,对应的ASCII字符是控制字符(ENQ,询问符),本身不属于可打印可见字符范畴,因此控制台输出时不会显示可见字形,并非强转、vector存储逻辑存在错误。

修复方案

根据你的实际需求选择对应方案即可:

  • 若需求是存储int数值对应的数字字符(比如int值5对应字符'5'):
    转换时加上ASCII表中'0'的偏移量即可,将原有转换代码char h = char(i);修改为char h = char(i + '0');。数字字符在标准ASCII表中连续排列,'0'对应十进制值48,加偏移后int 5会被转换为对应'5'的ASCII值53,属于可打印可见字符。
  • 若需求是存储原始ASCII值,仅需要调试时确认存储的内容正确:
    输出时将char强转为int类型打印对应十进制值即可,修改输出代码为:
    std::cout << "should be an element ->" << static_cast<int>(i) << '\n';
    
    即可直观看到存入的char对应的原始数值,确认存储逻辑正确性。
完整示例代码
#include <iostream>
#include <vector>

int main(int argc, const char * argv[]) {
    // 方案1:存储数字字符
    std::vector<char> test{'a','b'};
    int i = 5;
    char h = char(i + '0');
    test.push_back(h);
    
    std::cout << "方案1(存储数字字符)输出:\n";
    for(auto elem: test){
        std::cout << "should be an element ->" << elem << '\n';
    }
    std::cout<< "size of vec is -> " << test.size() << "\n\n";

    // 方案2:存储原始ASCII值,输出十进制数值
    std::vector<char> test2{'a','b'};
    char h2 = char(i);
    test2.push_back(h2);
    
    std::cout << "方案2(存储原始ASCII值)输出:\n";
    for(auto elem: test2){
        std::cout << "should be an element -> 字符显示:" << elem << " 对应十进制值:" << static_cast<int>(elem) << '\n';
    }
    std::cout<< "size of vec is -> " << test2.size();
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 18:54:06