| 
									
										
										
										
											2019-05-17 11:55:34 +02:00
										 |  |  | .. highlight:: c
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. _bytesobjects:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Bytes Objects
 | 
					
						
							|  |  |  | -------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-02 12:32:59 -07:00
										 |  |  | These functions raise :exc:`TypeError` when expecting a bytes parameter and
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | called with a non-bytes parameter.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-04 11:04:41 +01:00
										 |  |  | .. index:: pair: object; bytes
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:type:: PyBytesObject
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  |    This subtype of :c:type:`PyObject` represents a Python bytes object.
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:var:: PyTypeObject PyBytes_Type
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  |    This instance of :c:type:`PyTypeObject` represents the Python bytes type; it
 | 
					
						
							| 
									
										
										
										
											2010-10-17 10:59:41 +00:00
										 |  |  |    is the same object as :class:`bytes` in the Python layer.
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: int PyBytes_Check(PyObject *o)
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    Return true if the object *o* is a bytes object or an instance of a subtype
 | 
					
						
							| 
									
										
										
										
											2021-01-06 12:38:26 +01:00
										 |  |  |    of the bytes type.  This function always succeeds.
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: int PyBytes_CheckExact(PyObject *o)
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    Return true if the object *o* is a bytes object, but not an instance of a
 | 
					
						
							| 
									
										
										
										
											2021-01-06 12:38:26 +01:00
										 |  |  |    subtype of the bytes type.  This function always succeeds.
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: PyObject* PyBytes_FromString(const char *v)
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    Return a new bytes object with a copy of the string *v* as value on success,
 | 
					
						
							| 
									
										
										
										
											2019-10-30 12:03:20 +02:00
										 |  |  |    and ``NULL`` on failure.  The parameter *v* must not be ``NULL``; it will not be
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    checked.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: PyObject* PyBytes_FromStringAndSize(const char *v, Py_ssize_t len)
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    Return a new bytes object with a copy of the string *v* as value and length
 | 
					
						
							| 
									
										
										
										
											2019-10-30 12:03:20 +02:00
										 |  |  |    *len* on success, and ``NULL`` on failure.  If *v* is ``NULL``, the contents of
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    the bytes object are uninitialized.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-16 09:38:43 +01:00
										 |  |  |    .. deprecated:: 3.15
 | 
					
						
							|  |  |  |       ``PyBytes_FromStringAndSize(NULL, len)`` is :term:`soft deprecated`,
 | 
					
						
							|  |  |  |       use the :c:type:`PyBytesWriter` API instead.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: PyObject* PyBytes_FromFormat(const char *format, ...)
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  |    Take a C :c:func:`printf`\ -style *format* string and a variable number of
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    arguments, calculate the size of the resulting Python bytes object and return
 | 
					
						
							|  |  |  |    a bytes object with the values formatted into it.  The variable arguments
 | 
					
						
							|  |  |  |    must be C types and must correspond exactly to the format characters in the
 | 
					
						
							|  |  |  |    *format* string.  The following format characters are allowed:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. % XXX: This should be exactly the same as the table in PyErr_Format.
 | 
					
						
							|  |  |  |    .. % One should just refer to the other.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-28 13:28:44 +01:00
										 |  |  |    .. tabularcolumns:: |l|l|L|
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    +-------------------+---------------+--------------------------------+
 | 
					
						
							|  |  |  |    | Format Characters | Type          | Comment                        |
 | 
					
						
							|  |  |  |    +===================+===============+================================+
 | 
					
						
							| 
									
										
										
										
											2023-07-27 01:41:15 +02:00
										 |  |  |    | ``%%``            | *n/a*         | The literal % character.       |
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    +-------------------+---------------+--------------------------------+
 | 
					
						
							| 
									
										
										
										
											2023-07-27 01:41:15 +02:00
										 |  |  |    | ``%c``            | int           | A single byte,                 |
 | 
					
						
							| 
									
										
										
										
											2015-05-13 20:31:53 -04:00
										 |  |  |    |                   |               | represented as a C int.        |
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    +-------------------+---------------+--------------------------------+
 | 
					
						
							| 
									
										
										
										
											2023-07-27 01:41:15 +02:00
										 |  |  |    | ``%d``            | int           | Equivalent to                  |
 | 
					
						
							| 
									
										
										
										
											2017-04-27 11:36:35 +08:00
										 |  |  |    |                   |               | ``printf("%d")``. [1]_         |
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    +-------------------+---------------+--------------------------------+
 | 
					
						
							| 
									
										
										
										
											2023-07-27 01:41:15 +02:00
										 |  |  |    | ``%u``            | unsigned int  | Equivalent to                  |
 | 
					
						
							| 
									
										
										
										
											2017-04-27 11:36:35 +08:00
										 |  |  |    |                   |               | ``printf("%u")``. [1]_         |
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    +-------------------+---------------+--------------------------------+
 | 
					
						
							| 
									
										
										
										
											2023-07-27 01:41:15 +02:00
										 |  |  |    | ``%ld``           | long          | Equivalent to                  |
 | 
					
						
							| 
									
										
										
										
											2017-04-27 11:36:35 +08:00
										 |  |  |    |                   |               | ``printf("%ld")``. [1]_        |
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    +-------------------+---------------+--------------------------------+
 | 
					
						
							| 
									
										
										
										
											2023-07-27 01:41:15 +02:00
										 |  |  |    | ``%lu``           | unsigned long | Equivalent to                  |
 | 
					
						
							| 
									
										
										
										
											2017-04-27 11:36:35 +08:00
										 |  |  |    |                   |               | ``printf("%lu")``. [1]_        |
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    +-------------------+---------------+--------------------------------+
 | 
					
						
							| 
									
										
										
										
											2023-07-27 01:41:15 +02:00
										 |  |  |    | ``%zd``           | :c:type:`\    | Equivalent to                  |
 | 
					
						
							| 
									
										
										
										
											2022-05-13 14:10:16 +02:00
										 |  |  |    |                   | Py_ssize_t`   | ``printf("%zd")``. [1]_        |
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    +-------------------+---------------+--------------------------------+
 | 
					
						
							| 
									
										
										
										
											2023-07-27 01:41:15 +02:00
										 |  |  |    | ``%zu``           | size_t        | Equivalent to                  |
 | 
					
						
							| 
									
										
										
										
											2017-04-27 11:36:35 +08:00
										 |  |  |    |                   |               | ``printf("%zu")``. [1]_        |
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    +-------------------+---------------+--------------------------------+
 | 
					
						
							| 
									
										
										
										
											2023-07-27 01:41:15 +02:00
										 |  |  |    | ``%i``            | int           | Equivalent to                  |
 | 
					
						
							| 
									
										
										
										
											2017-04-27 11:36:35 +08:00
										 |  |  |    |                   |               | ``printf("%i")``. [1]_         |
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    +-------------------+---------------+--------------------------------+
 | 
					
						
							| 
									
										
										
										
											2023-07-27 01:41:15 +02:00
										 |  |  |    | ``%x``            | int           | Equivalent to                  |
 | 
					
						
							| 
									
										
										
										
											2017-04-27 11:36:35 +08:00
										 |  |  |    |                   |               | ``printf("%x")``. [1]_         |
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    +-------------------+---------------+--------------------------------+
 | 
					
						
							| 
									
										
										
										
											2023-07-27 01:41:15 +02:00
										 |  |  |    | ``%s``            | const char\*  | A null-terminated C character  |
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    |                   |               | array.                         |
 | 
					
						
							|  |  |  |    +-------------------+---------------+--------------------------------+
 | 
					
						
							| 
									
										
										
										
											2023-07-27 01:41:15 +02:00
										 |  |  |    | ``%p``            | const void\*  | The hex representation of a C  |
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    |                   |               | pointer. Mostly equivalent to  |
 | 
					
						
							|  |  |  |    |                   |               | ``printf("%p")`` except that   |
 | 
					
						
							|  |  |  |    |                   |               | it is guaranteed to start with |
 | 
					
						
							|  |  |  |    |                   |               | the literal ``0x`` regardless  |
 | 
					
						
							|  |  |  |    |                   |               | of what the platform's         |
 | 
					
						
							|  |  |  |    |                   |               | ``printf`` yields.             |
 | 
					
						
							|  |  |  |    +-------------------+---------------+--------------------------------+
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    An unrecognized format character causes all the rest of the format string to be
 | 
					
						
							| 
									
										
										
										
											2015-05-13 20:31:53 -04:00
										 |  |  |    copied as-is to the result object, and any extra arguments discarded.
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-27 11:36:35 +08:00
										 |  |  |    .. [1] For integer specifiers (d, u, ld, lu, zd, zu, i, x): the 0-conversion
 | 
					
						
							|  |  |  |       flag has effect even when a precision is given.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: PyObject* PyBytes_FromFormatV(const char *format, va_list vargs)
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  |    Identical to :c:func:`PyBytes_FromFormat` except that it takes exactly two
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    arguments.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: PyObject* PyBytes_FromObject(PyObject *o)
 | 
					
						
							| 
									
										
										
										
											2008-08-26 16:46:47 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    Return the bytes representation of object *o* that implements the buffer
 | 
					
						
							|  |  |  |    protocol.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: Py_ssize_t PyBytes_Size(PyObject *o)
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    Return the length of the bytes in bytes object *o*.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: Py_ssize_t PyBytes_GET_SIZE(PyObject *o)
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-03 20:14:58 +02:00
										 |  |  |    Similar to :c:func:`PyBytes_Size`, but without error checking.
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: char* PyBytes_AsString(PyObject *o)
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-13 20:31:53 -04:00
										 |  |  |    Return a pointer to the contents of *o*.  The pointer
 | 
					
						
							|  |  |  |    refers to the internal buffer of *o*, which consists of ``len(o) + 1``
 | 
					
						
							|  |  |  |    bytes.  The last byte in the buffer is always null, regardless of
 | 
					
						
							|  |  |  |    whether there are any other null bytes.  The data must not be
 | 
					
						
							|  |  |  |    modified in any way, unless the object was just created using
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    ``PyBytes_FromStringAndSize(NULL, size)``. It must not be deallocated.  If
 | 
					
						
							| 
									
										
										
										
											2019-10-30 12:03:20 +02:00
										 |  |  |    *o* is not a bytes object at all, :c:func:`PyBytes_AsString` returns ``NULL``
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    and raises :exc:`TypeError`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: char* PyBytes_AS_STRING(PyObject *string)
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-03 20:14:58 +02:00
										 |  |  |    Similar to :c:func:`PyBytes_AsString`, but without error checking.
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: int PyBytes_AsStringAndSize(PyObject *obj, char **buffer, Py_ssize_t *length)
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-13 20:31:53 -04:00
										 |  |  |    Return the null-terminated contents of the object *obj*
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    through the output variables *buffer* and *length*.
 | 
					
						
							| 
									
										
										
										
											2023-11-03 06:51:28 -07:00
										 |  |  |    Returns ``0`` on success.
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-30 12:03:20 +02:00
										 |  |  |    If *length* is ``NULL``, the bytes object
 | 
					
						
							| 
									
										
										
										
											2015-05-13 20:31:53 -04:00
										 |  |  |    may not contain embedded null bytes;
 | 
					
						
							| 
									
										
										
										
											2016-07-12 09:14:15 +03:00
										 |  |  |    if it does, the function returns ``-1`` and a :exc:`ValueError` is raised.
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-13 20:31:53 -04:00
										 |  |  |    The buffer refers to an internal buffer of *obj*, which includes an
 | 
					
						
							|  |  |  |    additional null byte at the end (not counted in *length*).  The data
 | 
					
						
							|  |  |  |    must not be modified in any way, unless the object was just created using
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    ``PyBytes_FromStringAndSize(NULL, size)``.  It must not be deallocated.  If
 | 
					
						
							| 
									
										
										
										
											2015-05-13 20:31:53 -04:00
										 |  |  |    *obj* is not a bytes object at all, :c:func:`PyBytes_AsStringAndSize`
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    returns ``-1`` and raises :exc:`TypeError`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-12 09:14:15 +03:00
										 |  |  |    .. versionchanged:: 3.5
 | 
					
						
							|  |  |  |       Previously, :exc:`TypeError` was raised when embedded null bytes were
 | 
					
						
							|  |  |  |       encountered in the bytes object.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: void PyBytes_Concat(PyObject **bytes, PyObject *newpart)
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    Create a new bytes object in *\*bytes* containing the contents of *newpart*
 | 
					
						
							|  |  |  |    appended to *bytes*; the caller will own the new reference.  The reference to
 | 
					
						
							| 
									
										
										
										
											2015-05-13 20:31:53 -04:00
										 |  |  |    the old value of *bytes* will be stolen.  If the new object cannot be
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    created, the old reference to *bytes* will still be discarded and the value
 | 
					
						
							| 
									
										
										
										
											2019-10-30 12:03:20 +02:00
										 |  |  |    of *\*bytes* will be set to ``NULL``; the appropriate exception will be set.
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: void PyBytes_ConcatAndDel(PyObject **bytes, PyObject *newpart)
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-13 20:31:53 -04:00
										 |  |  |    Create a new bytes object in *\*bytes* containing the contents of *newpart*
 | 
					
						
							| 
									
										
										
										
											2023-08-07 15:40:59 -06:00
										 |  |  |    appended to *bytes*.  This version releases the :term:`strong reference`
 | 
					
						
							|  |  |  |    to *newpart* (i.e. decrements its reference count).
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-30 14:57:33 +02:00
										 |  |  | .. c:function:: PyObject* PyBytes_Join(PyObject *sep, PyObject *iterable)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Similar to ``sep.join(iterable)`` in Python.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    *sep* must be Python :class:`bytes` object.
 | 
					
						
							|  |  |  |    (Note that :c:func:`PyUnicode_Join` accepts ``NULL`` separator and treats
 | 
					
						
							|  |  |  |    it as a space, whereas :c:func:`PyBytes_Join` doesn't accept ``NULL``
 | 
					
						
							|  |  |  |    separator.)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    *iterable* must be an iterable object yielding objects that implement the
 | 
					
						
							|  |  |  |    :ref:`buffer protocol <bufferobjects>`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    On success, return a new :class:`bytes` object.
 | 
					
						
							|  |  |  |    On error, set an exception and return ``NULL``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-06 16:08:17 +02:00
										 |  |  |    .. versionadded:: 3.14
 | 
					
						
							| 
									
										
										
										
											2024-08-30 14:57:33 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: int _PyBytes_Resize(PyObject **bytes, Py_ssize_t newsize)
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-25 17:32:11 +02:00
										 |  |  |    Resize a bytes object. *newsize* will be the new length of the bytes object.
 | 
					
						
							|  |  |  |    You can think of it as creating a new bytes object and destroying the old
 | 
					
						
							|  |  |  |    one, only more efficiently.
 | 
					
						
							|  |  |  |    Pass the address of an
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    existing bytes object as an lvalue (it may be written into), and the new size
 | 
					
						
							|  |  |  |    desired.  On success, *\*bytes* holds the resized bytes object and ``0`` is
 | 
					
						
							|  |  |  |    returned; the address in *\*bytes* may differ from its input value.  If the
 | 
					
						
							|  |  |  |    reallocation fails, the original bytes object at *\*bytes* is deallocated,
 | 
					
						
							| 
									
										
										
										
											2019-10-30 12:03:20 +02:00
										 |  |  |    *\*bytes* is set to ``NULL``, :exc:`MemoryError` is set, and ``-1`` is
 | 
					
						
							| 
									
										
										
										
											2008-05-26 15:01:55 +00:00
										 |  |  |    returned.
 | 
					
						
							| 
									
										
										
										
											2025-09-12 13:41:59 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-16 09:38:43 +01:00
										 |  |  |    .. deprecated:: 3.15
 | 
					
						
							|  |  |  |       The function is :term:`soft deprecated`,
 | 
					
						
							|  |  |  |       use the :c:type:`PyBytesWriter` API instead.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-16 14:51:45 +01:00
										 |  |  | .. _pybyteswriter:
 | 
					
						
							| 
									
										
										
										
											2025-09-16 09:38:43 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-12 13:41:59 +02:00
										 |  |  | PyBytesWriter
 | 
					
						
							|  |  |  | -------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The :c:type:`PyBytesWriter` API can be used to create a Python :class:`bytes`
 | 
					
						
							|  |  |  | object.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. versionadded:: next
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. c:type:: PyBytesWriter
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    A bytes writer instance.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The API is **not thread safe**: a writer should only be used by a single
 | 
					
						
							|  |  |  |    thread at the same time.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The instance must be destroyed by :c:func:`PyBytesWriter_Finish` on
 | 
					
						
							|  |  |  |    success, or :c:func:`PyBytesWriter_Discard` on error.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Create, Finish, Discard
 | 
					
						
							|  |  |  | ^^^^^^^^^^^^^^^^^^^^^^^
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. c:function:: PyBytesWriter* PyBytesWriter_Create(Py_ssize_t size)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Create a :c:type:`PyBytesWriter` to write *size* bytes.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    If *size* is greater than zero, allocate *size* bytes, and set the
 | 
					
						
							|  |  |  |    writer size to *size*. The caller is responsible to write *size*
 | 
					
						
							|  |  |  |    bytes using :c:func:`PyBytesWriter_GetData`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-10 13:01:06 +02:00
										 |  |  |    On error, set an exception and return ``NULL``.
 | 
					
						
							| 
									
										
										
										
											2025-09-12 13:41:59 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |    *size* must be positive or zero.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. c:function:: PyObject* PyBytesWriter_Finish(PyBytesWriter *writer)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Finish a :c:type:`PyBytesWriter` created by
 | 
					
						
							|  |  |  |    :c:func:`PyBytesWriter_Create`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    On success, return a Python :class:`bytes` object.
 | 
					
						
							|  |  |  |    On error, set an exception and return ``NULL``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The writer instance is invalid after the call in any case.
 | 
					
						
							|  |  |  |    No API can be called on the writer after :c:func:`PyBytesWriter_Finish`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. c:function:: PyObject* PyBytesWriter_FinishWithSize(PyBytesWriter *writer, Py_ssize_t size)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Similar to :c:func:`PyBytesWriter_Finish`, but resize the writer
 | 
					
						
							|  |  |  |    to *size* bytes before creating the :class:`bytes` object.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. c:function:: PyObject* PyBytesWriter_FinishWithPointer(PyBytesWriter *writer, void *buf)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Similar to :c:func:`PyBytesWriter_Finish`, but resize the writer
 | 
					
						
							|  |  |  |    using *buf* pointer before creating the :class:`bytes` object.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Set an exception and return ``NULL`` if *buf* pointer is outside the
 | 
					
						
							|  |  |  |    internal buffer bounds.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Function pseudo-code::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        Py_ssize_t size = (char*)buf - (char*)PyBytesWriter_GetData(writer);
 | 
					
						
							|  |  |  |        return PyBytesWriter_FinishWithSize(writer, size);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. c:function:: void PyBytesWriter_Discard(PyBytesWriter *writer)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Discard a :c:type:`PyBytesWriter` created by :c:func:`PyBytesWriter_Create`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Do nothing if *writer* is ``NULL``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The writer instance is invalid after the call.
 | 
					
						
							|  |  |  |    No API can be called on the writer after :c:func:`PyBytesWriter_Discard`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | High-level API
 | 
					
						
							|  |  |  | ^^^^^^^^^^^^^^
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. c:function:: int PyBytesWriter_WriteBytes(PyBytesWriter *writer, const void *bytes, Py_ssize_t size)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Grow the *writer* internal buffer by *size* bytes,
 | 
					
						
							|  |  |  |    write *size* bytes of *bytes* at the *writer* end,
 | 
					
						
							|  |  |  |    and add *size* to the *writer* size.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    If *size* is equal to ``-1``, call ``strlen(bytes)`` to get the
 | 
					
						
							|  |  |  |    string length.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    On success, return ``0``.
 | 
					
						
							|  |  |  |    On error, set an exception and return ``-1``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-12 14:21:57 +02:00
										 |  |  | .. c:function:: int PyBytesWriter_Format(PyBytesWriter *writer, const char *format, ...)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Similar to :c:func:`PyBytes_FromFormat`, but write the output directly at
 | 
					
						
							|  |  |  |    the writer end. Grow the writer internal buffer on demand. Then add the
 | 
					
						
							|  |  |  |    written size to the writer size.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    On success, return ``0``.
 | 
					
						
							|  |  |  |    On error, set an exception and return ``-1``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-12 13:41:59 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | Getters
 | 
					
						
							|  |  |  | ^^^^^^^
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. c:function:: Py_ssize_t PyBytesWriter_GetSize(PyBytesWriter *writer)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Get the writer size.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. c:function:: void* PyBytesWriter_GetData(PyBytesWriter *writer)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Get the writer data: start of the internal buffer.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The pointer is valid until :c:func:`PyBytesWriter_Finish` or
 | 
					
						
							|  |  |  |    :c:func:`PyBytesWriter_Discard` is called on *writer*.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Low-level API
 | 
					
						
							|  |  |  | ^^^^^^^^^^^^^
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. c:function:: int PyBytesWriter_Resize(PyBytesWriter *writer, Py_ssize_t size)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Resize the writer to *size* bytes. It can be used to enlarge or to
 | 
					
						
							|  |  |  |    shrink the writer.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Newly allocated bytes are left uninitialized.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    On success, return ``0``.
 | 
					
						
							|  |  |  |    On error, set an exception and return ``-1``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    *size* must be positive or zero.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. c:function:: int PyBytesWriter_Grow(PyBytesWriter *writer, Py_ssize_t grow)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Resize the writer by adding *grow* bytes to the current writer size.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Newly allocated bytes are left uninitialized.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    On success, return ``0``.
 | 
					
						
							|  |  |  |    On error, set an exception and return ``-1``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    *size* can be negative to shrink the writer.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. c:function:: void* PyBytesWriter_GrowAndUpdatePointer(PyBytesWriter *writer, Py_ssize_t size, void *buf)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Similar to :c:func:`PyBytesWriter_Grow`, but update also the *buf*
 | 
					
						
							|  |  |  |    pointer.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The *buf* pointer is moved if the internal buffer is moved in memory.
 | 
					
						
							|  |  |  |    The *buf* relative position within the internal buffer is left
 | 
					
						
							|  |  |  |    unchanged.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    On error, set an exception and return ``NULL``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    *buf* must not be ``NULL``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Function pseudo-code::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        Py_ssize_t pos = (char*)buf - (char*)PyBytesWriter_GetData(writer);
 | 
					
						
							|  |  |  |        if (PyBytesWriter_Grow(writer, size) < 0) {
 | 
					
						
							|  |  |  |            return NULL;
 | 
					
						
							|  |  |  |        }
 | 
					
						
							|  |  |  |        return (char*)PyBytesWriter_GetData(writer) + pos;
 |