Re #1519: added pj_strtof() to convert string to float in PJLIB, as part of pjsua2 persistent API development

git-svn-id: https://svn.pjsip.org/repos/pjproject/branches/projects/pjsua2@4642 74dad513-b988-da41-8d7b-12977e46ad98
This commit is contained in:
Benny Prijono 2013-11-06 07:41:40 +00:00
parent 64ff3f68b4
commit a6bcf96f7f
2 changed files with 47 additions and 0 deletions

View File

@ -574,6 +574,15 @@ PJ_DECL(unsigned long) pj_strtoul(const pj_str_t *str);
PJ_DECL(unsigned long) pj_strtoul2(const pj_str_t *str, pj_str_t *endptr,
unsigned base);
/**
* Convert string to float.
*
* @param str the string.
*
* @return the value.
*/
PJ_DECL(float) pj_strtof(const pj_str_t *str);
/**
* Utility to convert unsigned integer to string. Note that the
* string will be NULL terminated.

View File

@ -175,6 +175,44 @@ PJ_DEF(unsigned long) pj_strtoul2(const pj_str_t *str, pj_str_t *endptr,
return value;
}
PJ_DEF(float) pj_strtof(const pj_str_t *str)
{
pj_str_t part;
char *pdot;
float val;
if (str->slen == 0)
return 0;
pdot = (char*)pj_memchr(str->ptr, '.', str->slen);
part.ptr = str->ptr;
part.slen = pdot ? pdot - str->ptr : str->slen;
if (part.slen)
val = pj_strtol(&part);
else
val = 0;
if (pdot) {
part.ptr = pdot + 1;
part.slen = (str->ptr + str->slen - pdot - 1);
if (part.slen) {
pj_str_t endptr;
float fpart, fdiv;
unsigned i;
fpart = pj_strtoul2(&part, &endptr, 10);
fdiv = 1.0;
for (i=0; i<(part.slen - endptr.slen); ++i)
fdiv = fdiv * 10;
if (val >= 0)
val += (fpart / fdiv);
else
val -= (fpart / fdiv);
}
}
return val;
}
PJ_DEF(int) pj_utoa(unsigned long val, char *buf)
{
return pj_utoa_pad(val, buf, 0, 0);