为什么' 1'和(char)1在c ++中比较时不相等?

时间:2014-10-25 20:19:38

标签: casting char

我的主要目标是将int转换为char类型。我使用(char)1来输入强制转换,但由于以下结果,它似乎不起作用:

我在以下代码中比较c ++中的'1'(char)1

if ('1' == (char)1)
{
    return 1;
}

然而,似乎由于不同的变量类型,比较要么无效,要么它们实际上并不相同。我一直认为将整数1转换为字符为(char)1。谁能告诉我如何将整数1转换为char '1'

5 个答案:

答案 0 :(得分:6)

' 1'根据{{​​3}}

等于(char)49

(char)1等于SOH (start of heading),这是一个不可打印的字符。

答案 1 :(得分:2)

因为ASCII等效于'1'是49而不是1。

答案 2 :(得分:1)

' 1' ==可打印1的字符CODE值,传统的ASCII值,但今天,使用任何字符集中的代码点值。

旧技巧是(ch - ' 0')来获取数值。

根据语言,您应该使用转换函数作为完整字符串。

C ++ - stoistolstrolstringstream

C - atoiatol(这些也适用于C ++)

答案 3 :(得分:0)

正如伊维萨所说,char(49)实际上是1。这是因为char从ASCII库中提取。

答案 4 :(得分:-1)

因为当您使用X对(char)X进行编号时,您只需将X转换为char的范围,-128 to 127 or 0 to 255(就像模数一样)。

例如,(char)300提供44(因为300%256 = 44)而(char)1提供1。正如其他评论中所述,1是与SOH(标题开始)的ASCII等价物,而不是字符'1'。