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:
parent
64ff3f68b4
commit
a6bcf96f7f
|
@ -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.
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue