如何将字符从 int 转换为“出现”在控制台中?
Posted
技术标签:
【中文标题】如何将字符从 int 转换为“出现”在控制台中?【英文标题】:how to get char casted from int to 'appear' in console out? 【发布时间】:2021-09-05 22:33:25 【问题描述】:我有一个向量,想将整数转换为字符,然后将转换后的字符推回向量。 我得到的是向量中的“不可见”元素,这不会导致明显的错误,增加 vec.size() 计数,但在控制台输出期间不显示。我该如何解决这个问题,使它们在向量中显示为正常/“可见”字符?有关错误的演示,请参见下面的代码。
#include <iostream>
#include <vector>
int main(int argc, const char * argv[])
std::vector<char> test'a','b';
int i = 5;
char h = char(i);
test.push_back(h);
for(auto i: test)
std::cout << "should be an element ->" << i << '\n';
std::cout<< "size of vec is -> " << test.size();
return 0;
【问题讨论】:
请注意整数0
不等价于字符'0'
。数值为 0 的字符是不可打印的空字符。
要将单个数字 int “转换”为可打印字符,请尝试 char h = i + '0';
。
@Pyson 声明 std::vector<:string> 类型的向量并使用函数 std::to_string 将整数转换为字符串并将它们推送到 vetctor
根据您想要的(打印字符或值),您需要获取正确的字符代码点(请参阅@Yksisarvinen 的评论)或转换为(无符号) int 分别在输出之前。旁注:如果要将值存储在 [-128; 127] 或 [0; 255] 你应该分别显式使用有符号或无符号字符,原始char
的符号是实现定义的。
正如其他人指出的那样,你想用这个做什么并不是很清楚。如果您需要“查看”那些无法打印的字符,我建议您使用以下内容:compilerexplorer
【参考方案1】:
如果我们检查您正在打印的内容
should be an element ->a
should be an element ->b
should be an element ->♣
size of vec is -> 3
以及数组中这些元素的值
vec[0] = 'a' (thats 97 integer value)
vec[1] = 'b' (thats 98 integer value)
vec[2] = '\x5' (thats 5 integer value)
您正在为您的程序获得正确的输出。 如果要将 5 转换为 char,则应添加 '0' 字符。 所以像
char = i + '0';
将在字符中存储 65 或“5”的整数值。
注意:C/C++ 中的字符只是 8 位数字,当您打印它们时,您会从 ascii 表中获得以下字符之一。 ascii 表中的某些字符是不可打印的字符,例如值为 0 的字符为 NULL。 TAB 值为 8(也可打印为 '\t')或 ESC 为 27。
【讨论】:
【参考方案2】:感谢所有建议和 cmets。为了清楚起见,这是我试图实现的目标。
#include <iostream>
#include <vector>
int main(int argc, const char * argv[])
std::vector<char> test'a','b';
int i = 12345 ;
std::string w = std::to_string(i);
for(auto i : w)
test.push_back(i);
for(auto i : test)
std::cout << "element in the vector -> " <<i << '\n';
【讨论】:
以上是关于如何将字符从 int 转换为“出现”在控制台中?的主要内容,如果未能解决你的问题,请参考以下文章