'A'のASCIIコードは65です。'Z'の場合は90です。'0'のASCIIコードは48です。'9'の場合は57です。これらのコードは、Unicode(UTF-8)、8859-x、およびその他の多くのコードセットでも使用されます。
を計算する'A' - '0'
と、65-48 = 17になります。これは、表示されている「7単位のオフ」です。
アルファベット文字「A」から「F」を同等の16進数に変換するには、次のバリエーションが必要です。
c - 'A' + 10;
'a'から'f'も許可されており、それらには次のものが必要です。
c - 'a' + 10;
または、最初に大文字に変換する必要があります。または、次を使用できます。
const char hexdigits[] = "0123456789ABCDEF";
int digit = strchr(hexdigits, toupper(c)) - hexdigits;
または他の無数のテクニックのいずれか。c
この最後のフラグメントは、が有効な16進数を含むことがわかっていることを前提としています。そうでない場合、それはひどく失敗します。
Cは、0〜9の数字のコードが連続していることを保証しますが、AZの文字のコードが連続していることを保証しないことに注意してください。特に、コードセットがEBCDIC(主にIBMメインフレームでのみ使用されるわけではありません)の場合、文字のコードは連続していません。