前述のようにlong
、コンストラクタには が必要です。どうやってそれを手に入れますか?ルックアップ配列を設定します。
const int BASE = MIN('0', MIN('a', 'A')); // std::min isn't an ICE
const int SIZE = MAX('9', MAX('f', 'F')) - BASE;
long lookup[SIZE];
lookup['0' - BASE] = 0; lookup['1' - BASE] = 1;
lookup['2' - BASE] = 2; lookup['3' - BASE] = 3;
lookup['4' - BASE] = 4; lookup['5' - BASE] = 5;
lookup['6' - BASE] = 6; lookup['7' - BASE] = 7;
lookup['8' - BASE] = 8; lookup['9' - BASE] = 9;
lookup['A' - BASE] = 10; lookup['a' - BASE] = 10;
lookup['B' - BASE] = 11; lookup['b' - BASE] = 11;
lookup['C' - BASE] = 12; lookup['c' - BASE] = 12;
lookup['D' - BASE] = 13; lookup['d' - BASE] = 13;
lookup['E' - BASE] = 14; lookup['e' - BASE] = 14;
lookup['F' - BASE] = 15; lookup['f' - BASE] = 15;
// ...
inline std::bitset<4> BitsFromChar(char c) {
return lookup[c-BASE];
}