Если вы предполагаете, что имеете дело с ASCII, то вы можете также воспользоваться преимуществами расположения символов.Чтобы преобразовать в верхний регистр, выполните c & ~0x20
.Чтобы преобразовать в нижний регистр, выполните c | 0x20
.Для переключения между прописными и строчными буквами, c ^ 0x20
.Это в основном равносильно добавлению или вычитанию 32 (== 0x20), но лучше, если их многократно применять, то, что вы ожидаете, например, toupper(toupper(c))
- это верхний регистр, а не c - 64
, т.е.out http://www.kernel.org/doc/man-pages/online/pages/man7/ascii.7.html, особенно шестигранный стол в конце.Это ясно показывает отношения между разными персонажами.Есть несколько хороших закономерностей, но я подозреваю, что по историческим причинам есть некоторые неприятные несоответствия.Например, чтобы преобразовать между [
и ]
или {
и }
, вы можете просто сделать 'c ^ 0x6', но между (
и )
это другое и другое для <
и >
.Однако, тем не менее, все еще возможно определить выражение без ветвей (т.е. без if
s и тому подобное), чтобы вычислить совпадающий разделитель для любого данного разделителя.