문자열 변환과 포매팅

숫자 변환과 포맷된 문자열 출력을 위한 함수.

int PyOS_snprintf(char *str, size_t size, const char *format, ...)

Output not more than size bytes to str according to the format string format and the extra arguments. See the Unix man page snprintf(3).

int PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va)

Output not more than size bytes to str according to the format string format and the variable argument list va. Unix man page vsnprintf(3).

PyOS_snprintf()PyOS_vsnprintf()는 표준 C 라이브러리 함수 snprintf()vsnprintf()를 감쌉니다. 그들의 목적은 경계 조건에서 표준 C 함수가 제공하지 않는 수준의 일관된 동작을 보장하는 것입니다.

The wrappers ensure that str[size-1] is always '\0' upon return. They never write more than size bytes (including the trailing '\0') into str. Both functions require that str != NULL, size > 0 and format != NULL.

플랫폼에 vsnprintf()가 없고 잘림을 방지하는 데 필요한 버퍼 크기가 size를 512바이트보다 더 초과하면, 파이썬은 Py_FatalError()로 중단됩니다.

이 함수들의 반환 값(rv)은 다음과 같이 해석되어야 합니다:

  • When 0 <= rv < size, the output conversion was successful and rv characters were written to str (excluding the trailing '\0' byte at str[rv]).

  • When rv >= size, the output conversion was truncated and a buffer with rv + 1 bytes would have been needed to succeed. str[size-1] is '\0' in this case.

  • When rv < 0, “something bad happened.” str[size-1] is '\0' in this case too, but the rest of str is undefined. The exact cause of the error depends on the underlying platform.

다음 함수는 로케일 독립적인 문자열에서 숫자로의 변환을 제공합니다.

double PyOS_string_to_double(const char *s, char **endptr, PyObject *overflow_exception)

문자열 sdouble로 변환하고, 실패 시 파이썬 예외를 발생시킵니다. 허용되는 문자열 집합은 s가 선행이나 후행 공백을 가질 수 없다는 점을 제외하고는 파이썬의 float() 생성자가 허용하는 문자열 집합에 대응합니다. 변환은 현재 로케일과 독립적입니다.

endptrNULL이면, 전체 문자열을 변환합니다. 문자열이 부동 소수점 숫자의 유효한 표현이 아니면 ValueError를 발생시키고 -1.0을 반환합니다.

endptr이 NULL이 아니면, 가능한 한 많은 문자열을 변환하고 *endptr이 변환되지 않은 첫 번째 문자를 가리키도록 설정합니다. 문자열의 초기 세그먼트가 부동 소수점 숫자의 유효한 표현이 아니면, *endptr이 문자열의 시작을 가리키도록 설정하고, ValueError를 발생시키고 -1.0을 반환합니다.

s가 float에 저장하기에 너무 큰 값을 나타낼 때 (예를 들어, 여러 플랫폼에서 "1e500"가 그런 문자열입니다), overflow_exceptionNULL이면 (적절한 부호와 함께) Py_HUGE_VAL을 반환하고, 어떤 예외도 설정하지 않습니다. 그렇지 않으면, overflow_exception은 파이썬 예외 객체를 가리켜야 합니다; 그 예외를 발생시키고 -1.0를 반환합니다. 두 경우 모두, 변환된 값 다음의 첫 번째 문자를 가리키도록 *endptr을 설정합니다.

변환 중 다른 에러가 발생하면 (예를 들어 메모리 부족 에러), 적절한 파이썬 예외를 설정하고 -1.0을 반환합니다.

버전 3.1에 추가.

char* PyOS_double_to_string(double val, char format_code, int precision, int flags, int *ptype)

제공된 format_code, precisionflags를 사용하여 double val을 문자열로 변환합니다.

format_code'e', 'E', 'f', 'F', 'g', 'G' 또는 'r' 중 하나여야 합니다. 'r'의 경우, 제공된 precision은 0이어야 하며 무시됩니다. 'r' 포맷 코드는 표준 repr() 형식을 지정합니다.

flagsPy_DTSF_SIGN, Py_DTSF_ADD_DOT_0 또는 Py_DTSF_ALT 값을 0개 이상 함께 or 할 수 있습니다:

  • Py_DTSF_SIGNval가 음수가 아닐 때도 항상 반환된 문자열 앞에 부호 문자가 오는 것을 뜻합니다.

  • Py_DTSF_ADD_DOT_0은 반환된 문자열이 정수처럼 보이지 않도록 하는 것을 뜻합니다.

  • Py_DTSF_ALT는 “대체” 포매팅 규칙을 적용하는 것을 뜻합니다. 자세한 내용은 PyOS_snprintf() '#' 지정자에 대한 설명서를 참조하십시오.

ptypeNULL이 아니면, 포인터가 가리키는 값은 Py_DTST_FINITE, Py_DTST_INFINITE 또는 Py_DTST_NAN 중 하나로 설정되어, val가 각각 유한 수, 무한 수 또는 NaN임을 나타냅니다.

반환 값은 변환된 문자열이 있는 buffer에 대한 포인터이거나, 변환에 실패하면 NULL입니다. 호출자는 PyMem_Free()를 호출하여 반환된 문자열을 해제해야 합니다.

버전 3.1에 추가.

int PyOS_stricmp(const char *s1, const char *s2)

대소 문자 구분 없는 문자열 비교. 이 함수는 대소 문자를 무시한다는 점만 제외하면 strcmp()와 거의 같게 작동합니다.

int PyOS_strnicmp(const char *s1, const char *s2, Py_ssize_t  size)

대소 문자 구분 없는 문자열 비교. 이 함수는 대소 문자를 무시한다는 점만 제외하면 strncmp()와 거의 같게 작동합니다.