我有一个例子:
int var = 5;
char ch = (char)var;
char ch2 = var+48;
cout << ch << endl;
cout << ch2 << endl;
我还有其他一些代码。 (char)返回了错误的答案,但+48没有。当我将 ONLY (char)更改为+48时,我的代码得到了纠正。
在C ++中使用(char)和+48(ASCII)将int转换为char有什么区别?
答案 0 :(得分:0)
不同之处在于,转化为字符(char)
会将数字明确转换为char
,而不会添加48。
重要的是要注意int
通常为32位,char
通常为8位。这意味着您可以存储在char中的数字是-127到+127(或0到255-(2 ^ 8-1),如果你使用unsigned char)和int
来自-2,147,483,648( - 231)至2,147,483,647(231 - 1)(或0至2 ^ 32 -1为无符号)。
将48添加到值不会将类型更改为char。
答案 1 :(得分:0)
通常char
代表int
的数字。将int
值转换为char
并不提供ASCII表示。
ASCII码作为数字的数字范围从48
(== '0'
)到58
(== '9'
)。因此,要获得可打印数字,您必须添加'0'
(或48
)。
答案 2 :(得分:0)
char
只是c++中的基本积分面额。输出语句(如cout
和printf
将char
整数映射到相应的字符映射。在Windows计算机上,这通常为ASCII。
请注意,ASCII中的5 th 映射到没有可打印字符的查询字符,而53 rd 字符映射到可打印字符5。
在char
中存储0-9号码的普遍接受的黑客行为是:const char ch = var + '0'
注意这里的缺点很重要:
var
超出0 - 9范围,则此var + '0'
将映射到数字字符映射以外的其他内容使用以下方法获取与 1 或 2 无关的数字的最高位数的保证方法:
const auto ch = to_string(var).front()
答案 3 :(得分:0)
char ch=(char)var;
与char ch=var;
具有相同的效果,并将数值5
指定给ch
。您正在使用ASCII(与所有现代系统一样),ASCII字符代码5表示查询'ENQ'旧的终端控制代码。也许一些旧计时器有一个线索它做了什么!
char ch2 = var+48;
将数值53
分配给ch2
,这恰好代表数字'5'的ASCII字符。 ASCII 48为零(0),数字全部按顺序出现在ASCII表中。所以48 + 5落在53(代表'5'字符)。
在C ++中char
是整数类型。该值被解释为表示ASCII字符,但应将其视为持有数字。
其数值范围为[-128,127]或[0,255]。那是因为C ++需要sizeof(char)==1
,而所有现代平台都需要8位字节。
注意:C ++实际上并不强制要求ASCII,但在所有现代平台上都是如此。
PS:我认为它是C(由C ++继承)的一个不幸的工件sizeof(char)==1
并且没有一个名为byte
的单独基本类型。