16 being 2^4
I used 16 because that's the number of bits in an Arduino "int" (aka "short").
All my code snippet does is use the doubling method.
It starts from the most significant bit in the string representation of the number, checks to see if the string has terminated, else doubles the result so far, and then checks for an ASCII '1' (0x31), and if it's there, ORs in a 1 in the LSB position.
Because it doesn't check for the character '0' (0x30), this snippet would convert the string "1.1" to the number 5.