There don't appear to be any builtin functions for converting strings to floats or longs, so I wrote a couple, but they're very very rough. I care less about precision than about speed. Anybody have tips on how to speed them up?
static unsigned long string_to_long(const char* toConvert) { unsigned long result = 0; const char* c; unsigned int i; unsigned long pow_of_10 = 1; for(i = 0; i < rb->strlen(toConvert) - 1; ++i) pow_of_10 *= 10; for(c = toConvert; *c != '\0'; ++c) { result += char_to_long(*c) * pow_of_10; pow_of_10 /= 10; } return result; } static float string_to_float(const char* toConvert) { double result = 0.0; char convert_buffer[100]; const char* c; int decimal_location = 0; int decimal_places = 0; unsigned long pow_of_10 = 1; int i = 0; for(c = toConvert; *c != '.'; ++c) decimal_location++; rb->memcpy(convert_buffer, toConvert, decimal_location); convert_buffer[decimal_location] = '\0'; result = string_to_long(convert_buffer); rb->strcpy(convert_buffer, toConvert + decimal_location + 1); decimal_places = rb->strlen(toConvert) - decimal_location - 1; for(i = 0; i < decimal_places; ++i) pow_of_10 *= 10; result += (double)string_to_long(convert_buffer) / (double)pow_of_10; return (float)result; }