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类型打印对应十进制值即可,修改输出代码为:
即可直观看到存入的char对应的原始数值,确认存储逻辑正确性。std::cout << "should be an element ->" << static_cast<int>(i) << '\n';
完整示例代码
#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
相关产品推荐
相关产品推荐

