通过(char)和ASCII将int转换为char的区别

时间:2017-08-15 14:40:03

标签: c++ char

我有一个例子:

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有什么区别?

4 个答案:

答案 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只是中的基本积分面额。输出语句(如coutprintfchar整数映射到相应的字符映射。在Windows计算机上,这通常为ASCII

请注意,ASCII中的5 th 映射到没有可打印字符的查询字符,而53 rd 字符映射到可打印字符5。

char中存储0-9号码的普遍接受的黑客行为是:const char ch = var + '0'注意这里的缺点很重要:

  1. 如果您的代码在某些非ASCII字符映射上运行,则字符0,1,2,3,4,5,6,7,8和9可能不会按顺序排列,在这种情况下,这将不会# 39; t work
  2. 如果var超出0 - 9范围,则此var + '0'将映射到数字字符映射以外的其他内容
  3. 使用以下方法获取与 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的单独基本类型。