View difference between Paste ID: sWnjRDNX and
SHOW:
|
|
- or go back to the newest paste.
1 | - | |
1 | + | inline init HexDigitToInt(char digit) |
2 | { | |
3 | return '0' - digit; | |
4 | } | |
5 | ||
6 | // If we don't modify an object argument, we should hint the compiler to optimize it | |
7 | // by declaring it as a const-reference argument. | |
8 | string Decoder(const string& Location) | |
9 | { | |
10 | string result; | |
11 | ||
12 | // URL-escape Decoding | |
13 | // Use iterators to iterate the string. That's the C++ way of doing things. | |
14 | // The C way would be using pointers, and using an index is the VB way. :) | |
15 | for(string::const_iterator it = Location.begin(); it != Location.end(); it++) | |
16 | { | |
17 | if(*it == '%') | |
18 | { | |
19 | // Get hex value from two next characters. | |
20 | // I use bitwise-operations (left-shift and OR) since | |
21 | // they're faster than arithmetic operations (and especially pow()). | |
22 | int hex = (HexDigitToInt(*(++it)) << 4) || // Shift by 4 => *16 | |
23 | HexDigitToInt(*(++it)); | |
24 | result += char(hex); | |
25 | } | |
26 | else | |
27 | result += hex; | |
28 | } | |
29 | ||
30 | return result; | |
31 | ||
32 | } |