Tcl_NewByteArrayObj, Tcl_SetByteArrayObj, Tcl_GetByteArrayFromObj, Tcl_SetByteArrayLength − manipulate Tcl objects as a arrays of bytes


#include <tcl.h>

Tcl_Obj *
(bytes, length)

(objPtr, bytes, length)

unsigned char *
(objPtr, lengthPtr)

unsigned char *
(objPtr, length)


const unsigned char *bytes (in)

The array of bytes used to initialize or set a byte-array object.

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 object to be converted to byte-array type. For Tcl_GetByteArrayFromObj and Tcl_SetByteArrayLength, this points to the object from which to get the byte-array value; if objPtr does not already point to a byte-array object, it will be converted to one.

int *lengthPtr (out)

If non-NULL, filled with the length of the array of bytes in the object.



These procedures are used to create, modify, and read Tcl byte-array objects from C code. Byte-array objects 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 object to a byte-array. Obtaining the string representation of a byte-array object (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 object of byte-array type or modify an existing object to have a byte-array type. Both of these procedures set the object’s type to be byte-array and set the object’s internal representation to a copy of the array of bytes given by bytes. Tcl_NewByteArrayObj returns a pointer to a newly allocated object with a reference count of zero. Tcl_SetByteArrayObj invalidates any old string representation and, if the object is not already a byte-array object, frees any old internal representation.

Tcl_GetByteArrayFromObj converts a Tcl object to byte-array type and returns a pointer to the object’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 object and should not be freed. The contents of the array may be modified by the caller only if the object is not shared and the caller invalidates the string representation.

Tcl_SetByteArrayLength converts the Tcl object to byte-array type and changes the length of the object’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 object’s new array of bytes.


Tcl_GetStringFromObj, Tcl_NewObj, Tcl_IncrRefCount, Tcl_DecrRefCount


object, byte array, utf, unicode, internationalization

More Linux Commands

innd(8) - InterNetNews daemon (Admin - Linux man page)......
innd, the InterNetNews daemon, handles all incoming NNTP feeds, coordinates the storage, retransmission, and overview generation for all accepted articles, and

getpagesize(2) - get memory page size - Linux manual page...
The function getpagesize() returns the number of bytes in a memory page, where page is a fixed-length block, the unit for memory allocation and file mapping per

atan(3) - arc tangent function (Library - Linux man page)...
The atan() function calculates the principal value of the arc tangent of x; that is the value whose tangent is x. RETURN VALUE On success, these functions retur

utimes(2) - change file last access and modification times
Note: modern applications may prefer to use the interfaces described in utimensat(2). The utime() system call changes the access and modification times of the i

lgammal_r(3) - log gamma function - Linux manual page.......
For the definition of the Gamma function, see tgamma(3). The lgamma() function returns the natural logarithm of the absolute value of the Gamma function. The si

XrmStringToQuark(3) - manipulate resource quarks (Man Page)
The XrmUniqueQuark function allocates a quark that is guaranteed not to represent any string that is known to the resource manager. These functions can be used

XFreeModifierMap(3) - manipulate keyboard encoding and keybo
The XChangeKeyboardMapping function defines the symbols for the specified number of KeyCodes starting with first_keycode. The symbols for KeyCodes outside this

smidump(1) - dump SMI or SPPI modules in various formats....
The smidump program is used to dump the contents of a single MIB or PIB module or a collection of modules to stdout in a selectable output format. This format m

XCreatePixmapCursor(3) - create cursors - Linux manual page
X provides a set of standard cursor shapes in a special font named cursor. Applications are encouraged to use this interface for their cursors because the font

ldap_next_reference(3) - Stepping through continuation refer
These routines are used to step through the continuation references in a result chain received from ldap_result(3) or the synchronous LDAP search operation rout

sem_overview(7) - Overview of POSIX semaphores (Man Page)...
POSIX semaphores allow processes and threads to synchronize their actions. A semaphore is an integer whose value is never allowed to fall below zero. Two operat

calibrate_lens(1) - Lens calibration from straight lines....
OPTIONS -p &lt;filename&gt; Input Hugin PTO file. -j &lt;filename&gt; Input file containing line data. -d &lt;int&gt; Maximum dimension for re-sized image prior to processing. De

We can't live, work or learn in freedom unless the software we use is free.