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