Pourquoi le caractère ‘A’ serait-il comparé à 0x41?

Je cherchais du code C ++ et j’ai trouvé la construction suivante:

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

Je reçois un avertissement Visual Studio disant:

Avertissement L’expression conditionnelle C4127 est constante.

Visual Studio a clairement raison: «A» est défini comme étant 0x41. Pourquoi l’auteur écrit-il ce code, étant donné que deux des trois twigs sont du code mort?

0xc1 est le code du EBCDIC caractères EBCDIC pour A L’auteur teste une telle machine.

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

À première vue, il pourrait sembler que ce soit un code mort, mais «A» == 0x41 ne sera pas toujours vrai.

Ce que le développeur a essayé de faire ici, c’est de trouver paresseusement ce qu’est l’encodage de la machine implémentant ASCII ou toute variante d’ EBCDIC.

comme @Richard a suggéré que Capital a est mis en correspondance avec 0xc1 dans le Code international d’échange de codes décimal codé par code binary international, voir le tableau ci-dessous dans la twig 2 du if sinon …

entrer la description de l'image ici

Une autre valeur différente pourrait être trouvée par ASCII pour exmaple:

entrer la description de l'image ici

il aurait aussi bien pu:

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