On Sat, Feb 4, 2017 at 1:32 PM, Mattias Andrée <maand...@kth.se> wrote: > @@ -39,10 +39,8 @@ unescape(char *s) > off += m - i - 1; > for (--m, q = 0, factor = 1; m > i + 1; m--) { > - if (s[m] >= '0' && s[m] <= '9') > - q += (s[m] - '0') * factor; > - else if (s[m] >= 'A' && s[m] <= 'F') > - q += ((s[m] - 'A') + 10) * factor; > - else if (s[m] >= 'a' && s[m] <= 'f') > - q += ((s[m] - 'a') + 10) * factor; > + if (isdigit(s[m])) > + q += (s[m] & 15) * factor; > + else > + q += ((s[m] & 15) + 9) * factor; > factor *= 16; > } > -- > 2.11.0 > >
I think this would be clearer as: if (isdigit(s[m])) q += (s[m] - '0') * factor; else q += (tolower(s[m]) - 'a' + 10) * factor; But it is just a personal style preference. Or, if we do keep the bit twiddling, I highly recommend using hex instead of decimal, e.g. (s[m] & 0xf). Thoughts?