Conversión y formato de cadenas de caracteres¶
Funciones para conversión de números y salida de cadena de caracteres formateadas.
-
int
PyOS_snprintf
(char *str, size_t size, const char *format, ...)¶ Salida de no más de size bytes a str según la cadena de caracteres de formato format y los argumentos adicionales. Consulte la página de manual de Unix snprintf(3).
-
int
PyOS_vsnprintf
(char *str, size_t size, const char *format, va_list va)¶ Salida de no más de size bytes a str según la cadena de caracteres de formato format y la lista de argumentos variables va. Página de manual de Unix vsnprintf(3).
PyOS_snprintf()
y PyOS_vsnprintf()
envuelven las funciones estándar de la biblioteca C snprintf()
y vsnprintf()
. Su propósito es garantizar un comportamiento consistente en casos de esquina (corner cases), que las funciones del Estándar C no hacen.
Las envolturas aseguran que str[size-1]
sea siempre '\0'
al retornar. Nunca se escriben más de size bytes (incluido el '\0'
del final) en str. Ambas funciones requieren que str != NULL
, size > 0
y format != NULL
.
Si la plataforma no tiene vsnprintf()
y el tamaño del búfer necesario para evitar el truncamiento excede size en más de 512 bytes, Python aborta con a Py_FatalError()
.
El valor de retorno (rv) para estas funciones debe interpretarse de la siguiente manera:
Cuando
0 <= rv < size
, la conversión de salida fue exitosa y los caracteres rv se escribieron en str (excluyendo el byte'\0'
final enstr[rv]
).Cuando
rv >= size
, la conversión de salida se truncó y se habría necesitado un búfer conrv + 1
bytes para tener éxito.str[size-1]
es'\0'
en este caso.Cuando
rv < 0
, «sucedió algo malo».str[size-1]
es'\0'
en este caso también, pero el resto de str no está definido. La causa exacta del error depende de la plataforma subyacente.
Las siguientes funciones proporcionan cadenas de caracteres independientes de la configuración regional para numerar las conversiones.
-
double
PyOS_string_to_double
(const char *s, char **endptr, PyObject *overflow_exception)¶ Convierte una cadena de caracteres
s
en undouble
, generando una excepción de Python en caso de falla. El conjunto de cadenas de caracteres aceptadas corresponde al conjunto de cadenas aceptadas por el constructor de Pythonfloat()
, excepto ques
no debe tener espacios en blanco iniciales o finales. La conversión es independiente de la configuración regional actual.Si
endptr
esNULL
, convierte toda la cadena de caracteres. LanzaValueError
y retorna-1.0
si la cadena de caracteres no es una representación válida de un número de punto flotante.Si endptr no es
NULL
, convierte la mayor cantidad posible de la cadena de caracteres y configura*endptr
para que apunte al primer carácter no convertido. Si ningún segmento inicial de la cadena de caracteres es la representación válida de un número de punto flotante, configura*endptr
para que apunte al comienzo de la cadena de caracteres, lanza ValueError y retorna-1.0
.Si
s
representa un valor que es demasiado grande para almacenar en un flotante (por ejemplo,"1e500"
es una cadena de caracteres de este tipo en muchas plataformas), entonces sioverflow_exception
esNULL
retornaPy_HUGE_VAL
(con un signo apropiado) y no establece ninguna excepción. De lo contrario,overflow_exception
debe apuntar a un objeto excepción de Python; lanza esa excepción y retorna-1.0
. En ambos casos, configura*endptr
para que apunte al primer carácter después del valor convertido.Si se produce algún otro error durante la conversión (por ejemplo, un error de falta de memoria), establece la excepción Python adecuada y retorna
-1.0
.Nuevo en la versión 3.1.
-
char*
PyOS_double_to_string
(double val, char format_code, int precision, int flags, int *ptype)¶ Convierte un
double
val en una cadena de caracteres usando format_code, precision y flags suministrados.format_code debe ser uno de
'e'
,'E'
,'f'
,'F'
,'g'
,'G'
or'r'
. Para'r'
, la precision suministrada debe ser 0 y se ignora. El código de formato'r'
especifica el formato estándarrepr()
.flags puede ser cero o más de los valores
Py_DTSF_SIGN
,Py_DTSF_ADD_DOT_0
, oPy_DTSF_ALT
, unidos por or (or-ed) juntos:Py_DTSF_SIGN
significa preceder siempre a la cadena de caracteres retornada con un carácter de signo, incluso si val no es negativo.Py_DTSF_ADD_DOT_0
significa asegurarse de que la cadena de caracteres retornada no se verá como un número entero.Py_DTSF_ALT
significa aplicar reglas de formato «alternativas». Consulte la documentación del especificadorPyOS_snprintf`()
“#”` para obtener más detalles.
Si ptype no es
NULL
, el valor al que apunta se establecerá en uno dePy_DTST_FINITE
,Py_DTST_INFINITE
oPy_DTST_NAN
, lo que significa que val es un número finito, un número infinito o no es un número, respectivamente.El valor de retorno es un puntero a buffer con la cadena de caracteres convertida o
NULL
si la conversión falla. La persona que llama es responsable de liberar la cadena de caracteres retornada llamando aPyMem_Free()
.Nuevo en la versión 3.1.
-
int
PyOS_stricmp
(const char *s1, const char *s2)¶ Comparación no sensible a mayúsculas y minúsculas en cadenas de caracteres. La función se comporta casi de manera idéntica a
strcmp()
, excepto que ignora el caso.
-
int
PyOS_strnicmp
(const char *s1, const char *s2, Py_ssize_t size)¶ Comparación no sensible a mayúsculas y minúsculas en cadenas de caracteres. La función se comporta casi de manera idéntica a
strncmp()
, excepto que ignora el caso.