为什么这个角色会被' A'与0x41进行比较?

时间:2016-11-14 15:29:57

标签: c++ string

我正在查看一些C ++代码并找到以下构造:

if('A' == 0x41) {
  // ...
} else if('A' == 0xc1) {
  // ...
} else {
  // ...
}

我收到Visual Studio警告说:

  

警告C4127条件表达式是常量。

Visual Studio显然是正确的 - 当然' A'被定义为0x41。为什么作者编写这段代码,因为三个分支中有两个是死代码?

2 个答案:

答案 0 :(得分:116)

EBCDICA的{​​{1}}字符集代码。作者正在测试这样一台机器。

http://www.ibm.com/support/knowledgecenter/en/SSGH4D_15.1.3/com.ibm.xlf1513.aix.doc/language_ref/asciit.html

答案 1 :(得分:11)

乍一看可能看起来像死信,但'A'== 0x41并不总是会返回true ..

开发人员试图在这里做的是 lazily 找到实现 ASCII 的机器或 EBCDIC

的任何变体的编码

正如@Richard所建议的那样, a 映射到International - Extended Binary Coded Decimal Interchange Code中的 0xc1 ,参见下面if if else的2分支......

enter image description here

ASCII可以为exmaple找到另一个不同的值:

enter image description here

他也可以做​​到:

if('p' == 0x70) {
  // ...
} else if('p' == 0x97) {
  //...
}