That's strange way to test if a character is '.'. Plus, I'd expect you to have to maintain some kind of state as to which site of the . you are, so you can decide whether to shift right or left in base radix. I wouldn't expect it to work without it.
(s[x]<='9' ? '0':'0'+7)
That expression could be clearer, do you really need to use a magic number there?
You could make it easier to read and more robust (handling negatives, handling some errors), for example, by relying on standard library functions more:
If you want it to be as fast as possible, use a speed-oriented parsing library, such as boost.spirit (or at least, start by not making unnecessary copy of the string and not calling pow so much)
There's about a 0.01s difference between yours and mine, both iterating 100000 times.
Is there anything else i can do to make it faster? Except using a library.
Maybe there are some magical bitwise operations that can be applied?