Provided by: tcl8.6-doc_8.6.14+dfsg-1build1_all bug

NAME

       Tcl_NewByteArrayObj,  Tcl_SetByteArrayObj,  Tcl_GetByteArrayFromObj,  Tcl_SetByteArrayLength - manipulate
       Tcl values as a arrays of bytes

SYNOPSIS

       #include <tcl.h>

       Tcl_Obj *
       Tcl_NewByteArrayObj(bytes, length)

       void
       Tcl_SetByteArrayObj(objPtr, bytes, length)

       unsigned char *
       Tcl_GetByteArrayFromObj(objPtr, lengthPtr)

       unsigned char *
       Tcl_SetByteArrayLength(objPtr, length)

ARGUMENTS

       const unsigned char *bytes (in)              The array of bytes used to initialize or  set  a  byte-array
                                                    value. May be NULL even if length is non-zero.

       int length (in)                              The length of the array of bytes.  It must be >= 0.

       Tcl_Obj *objPtr (in/out)                     For  Tcl_SetByteArrayObj,  this  points  to  the value to be
                                                    converted to byte-array type.   For  Tcl_GetByteArrayFromObj
                                                    and  Tcl_SetByteArrayLength,  this  points to the value from
                                                    which to get  the  byte-array  value;  if  objPtr  does  not
                                                    already point to a byte-array value, it will be converted to
                                                    one.

       int *lengthPtr (out)                         If non-NULL, filled with the length of the array of bytes in
                                                    the value.
________________________________________________________________________________________________________________

DESCRIPTION

       These  procedures  are  used  to  create, modify, and read Tcl byte-array values from C code.  Byte-array
       values are typically used to hold the results of binary IO operations or data structures created with the
       binary  command.   In Tcl, an array of bytes is not equivalent to a string.  Conceptually, a string is an
       array of Unicode characters, while a byte-array is an array of 8-bit quantities with no implicit meaning.
       Accessor  functions  are  provided  to  get  the  string  representation of a byte-array or to convert an
       arbitrary value to a byte-array.  Obtaining the string representation of a byte-array value  (by  calling
       Tcl_GetStringFromObj)  produces  a  properly  formed UTF-8 sequence with a one-to-one mapping between the
       bytes in the internal representation and the UTF-8 characters in the string representation.

       Tcl_NewByteArrayObj and Tcl_SetByteArrayObj will create a new value  of  byte-array  type  or  modify  an
       existing value to have a byte-array type.  Both of these procedures set the value's type to be byte-array
       and set the  value's  internal  representation  to  a  copy  of  the  array  of  bytes  given  by  bytes.
       Tcl_NewByteArrayObj  returns  a  pointer  to  a  newly  allocated  value  with a reference count of zero.
       Tcl_SetByteArrayObj invalidates any old string representation and, if the value is not  already  a  byte-
       array  value,  frees  any  old internal representation. If bytes is NULL then the new byte array contains
       arbitrary values.

       Tcl_GetByteArrayFromObj converts a Tcl value to byte-array type and returns a pointer to the value's  new
       internal  representation  as  an  array  of  bytes.   The  length of this array is stored in lengthPtr if
       lengthPtr is non-NULL.  The storage for the array of bytes is owned by the value and should not be freed.
       The  contents  of  the array may be modified by the caller only if the value is not shared and the caller
       invalidates the string representation.

       Tcl_SetByteArrayLength converts the Tcl value to byte-array type and changes the length  of  the  value's
       internal  representation  as  an array of bytes.  If length is greater than the space currently allocated
       for the array, the array is reallocated to the new length; the newly allocated bytes at the  end  of  the
       array  have  arbitrary  values.   If length is less than the space currently allocated for the array, the
       length of array is reduced to the new length.  The return value is a pointer to the value's new array  of
       bytes.

SEE ALSO

       Tcl_GetStringFromObj, Tcl_NewObj, Tcl_IncrRefCount, Tcl_DecrRefCount

KEYWORDS

       value, binary data, byte array, utf, unicode, internationalization