the following code will make the program crash:

```
            string test="b1";
            unsigned __int8 t1 = stoi(test, 0, 8);

```

but 'b1'=177, should be ok for a 8 bits, right? , if I use 

```
string test="b1";
unsigned __int8 t1 = stoi(test, 0, 16);

```

everything looks ok, why need to use 16 bits for 'b1'? 

a more complicate situation is 16 bits will make it right, but 32 bits make it wrong!!!

```
string test="0800";

```

`unsigned __int16 t1 = stoi(test, 0, 16);`