Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

PackedByteArray

Un tableau compacté d'octets.

Description

An array specifically designed to hold bytes. Packs data tightly, so it saves memory for large array sizes.

PackedByteArray also provides methods to encode/decode various types to/from bytes. The way values are encoded is an implementation detail and shouldn't be relied upon when interacting with external apps.

Note: Packed arrays are always passed by reference. To get a copy of an array that can be modified independently of the original array, use duplicate(). This is not the case for built-in properties and methods. In these cases the returned packed array is a copy, and changing it will not affect the original value. To update a built-in property of this type, modify the returned array and then assign it to the property again.

Note: In a boolean context, a packed array will evaluate to false if it's empty. Otherwise, a packed array will always evaluate to true.

Note

Il y a des différences notables dans l'utilisation de cette API en C#. Voir Différences de l'API C# par rapport à GDScript pour plus d'informations.

Constructeurs

PackedByteArray

PackedByteArray()

PackedByteArray

PackedByteArray(from: PackedByteArray)

PackedByteArray

PackedByteArray(from: Array)

Méthodes

bool

append(value: int)

void

append_array(array: PackedByteArray)

int

bsearch(value: int, before: bool = true) const

void

bswap16(offset: int = 0, count: int = -1)

void

bswap32(offset: int = 0, count: int = -1)

void

bswap64(offset: int = 0, count: int = -1)

void

clear()

PackedByteArray

compress(compression_mode: int = 0) const

int

count(value: int) const

float

decode_double(byte_offset: int) const

float

decode_float(byte_offset: int) const

float

decode_half(byte_offset: int) const

int

decode_s8(byte_offset: int) const

int

decode_s16(byte_offset: int) const

int

decode_s32(byte_offset: int) const

int

decode_s64(byte_offset: int) const

int

decode_u8(byte_offset: int) const

int

decode_u16(byte_offset: int) const

int

decode_u32(byte_offset: int) const

int

decode_u64(byte_offset: int) const

Variant

decode_var(byte_offset: int, allow_objects: bool = false) const

int

decode_var_size(byte_offset: int, allow_objects: bool = false) const

PackedByteArray

decompress(buffer_size: int, compression_mode: int = 0) const

PackedByteArray

decompress_dynamic(max_output_size: int, compression_mode: int = 0) const

PackedByteArray

duplicate() const

void

encode_double(byte_offset: int, value: float)

void

encode_float(byte_offset: int, value: float)

void

encode_half(byte_offset: int, value: float)

void

encode_s8(byte_offset: int, value: int)

void

encode_s16(byte_offset: int, value: int)

void

encode_s32(byte_offset: int, value: int)

void

encode_s64(byte_offset: int, value: int)

void

encode_u8(byte_offset: int, value: int)

void

encode_u16(byte_offset: int, value: int)

void

encode_u32(byte_offset: int, value: int)

void

encode_u64(byte_offset: int, value: int)

int

encode_var(byte_offset: int, value: Variant, allow_objects: bool = false)

bool

erase(value: int)

void

fill(value: int)

int

find(value: int, from: int = 0) const

int

get(index: int) const

String

get_string_from_ascii() const

String

get_string_from_multibyte_char(encoding: String = "") const

String

get_string_from_utf8() const

String

get_string_from_utf16() const

String

get_string_from_utf32() const

String

get_string_from_wchar() const

bool

has(value: int) const

bool

has_encoded_var(byte_offset: int, allow_objects: bool = false) const

String

hex_encode() const

int

insert(at_index: int, value: int)

bool

is_empty() const

bool

push_back(value: int)

void

remove_at(index: int)

int

resize(new_size: int)

void

reverse()

int

rfind(value: int, from: int = -1) const

void

set(index: int, value: int)

int

size() const

PackedByteArray

slice(begin: int, end: int = 2147483647) const

void

sort()

PackedColorArray

to_color_array() const

PackedFloat32Array

to_float32_array() const

PackedFloat64Array

to_float64_array() const

PackedInt32Array

to_int32_array() const

PackedInt64Array

to_int64_array() const

PackedVector2Array

to_vector2_array() const

PackedVector3Array

to_vector3_array() const

PackedVector4Array

to_vector4_array() const

Opérateurs

bool

operator !=(right: PackedByteArray)

PackedByteArray

operator +(right: PackedByteArray)

bool

operator ==(right: PackedByteArray)

int

operator [](index: int)


Descriptions des constructeurs

PackedByteArray PackedByteArray() 🔗

Construit un PackedByteArray vide.


PackedByteArray PackedByteArray(from: PackedByteArray)

Construit un PackedByteArray comme une copie du PackedByteArray donné.


PackedByteArray PackedByteArray(from: Array)

Construit un nouveau PackedByteArray. Optionnellement, vous pouvez passer un Array générique qui sera converti.


Descriptions des méthodes

bool append(value: int) 🔗

Ajoute un élément à la fin du tableau (c'est un raccourci vers push_back()).


void append_array(array: PackedByteArray) 🔗

Ajoute un PackedByteArray à la fin de ce tableau.


int bsearch(value: int, before: bool = true) const 🔗

Cherche l'index d'une valeur existante (ou l'index d'insertion qui maintient l'ordre de tri, si la valeur n'est pas encore présente dans le tableau) en utilisant la recherche binaire. Optionnellement, un spécificateur before peut être passé. Si false, l'index renvoyé vient après toutes les entrées existantes de la valeur dans le tableau.

Note : Appeler bsearch() sur un tableau non trié résulte en un comportement inattendu.


void bswap16(offset: int = 0, count: int = -1) 🔗

Inverse l'ordre des octets de count segments de 16-bit du tableau à partir de offset. L'inversion est faite en place. Si count est inférieur à zéro, tous les segments jusqu'à la fin du tableau sont traités, et si la taille des données traitées n'est pas un multiple de 2, l'octet après le dernier segment 16-bit traité n'est pas modifié.


void bswap32(offset: int = 0, count: int = -1) 🔗

Inverse l'ordre des octets de count segments de 32-bit du tableau à partir de offset. L'inversion est faite en place. Si count est inférieur à zéro, tous les segments jusqu'à la fin du tableau sont traités, et si la taille des données traitées n'est pas un multiple de 4, l'octet après le dernier segment 32-bit traité n'est pas modifié.


void bswap64(offset: int = 0, count: int = -1) 🔗

Inverse l'ordre des octets de count segments de 64-bit du tableau à partir de offset. L'inversion est faite en place. Si count est inférieur à zéro, tous les segments jusqu'à la fin du tableau sont traités, et si la taille des données traitées n'est pas un multiple de 8, l'octet après le dernier segment 64-bit traité n'est pas modifié.


void clear() 🔗

Efface le contenu du tableau. C'est équivalent à resize() avec une taille de 0.


PackedByteArray compress(compression_mode: int = 0) const 🔗

Renvoie un nouveau PackedByteArray avec les données compressées. Définissez le mode de compression en utilisant l'une des constantes de CompressionMode.


int count(value: int) const 🔗

Renvoie le nombre de fois qu'un élément apparaît dans le tableau.


float decode_double(byte_offset: int) const 🔗

Décode un nombre flottant de 64 bits à partir des octets commençant après le décalage byte_offset. Échoue si le nombre d'octets est insuffisant. Renvoie 0.0 si un nombre valide ne peut pas être décodé.


float decode_float(byte_offset: int) const 🔗

Décode un nombre flottant de 32 bits à partir des octets commençant après le décalage byte_offset. Échoue si le nombre d'octets est insuffisant. Renvoie 0.0 si un nombre valide ne peut pas être décodé.


float decode_half(byte_offset: int) const 🔗

Décode un nombre flottant de 16 bits à partir des octets commençant après le décalage byte_offset. Échoue si le nombre d'octets est insuffisant. Renvoie 0.0 si un nombre valide ne peut pas être décodé.


int decode_s8(byte_offset: int) const 🔗

Décode un entier signé de 8 bits à partir des octets commençant après le décalage byte_offset. Échoue si le nombre d'octets est insuffisant. Renvoie 0 si un nombre valide ne peut pas être décodé.


int decode_s16(byte_offset: int) const 🔗

Décode un entier signé de 16 bits à partir des octets commençant après le décalage byte_offset. Échoue si le nombre d'octets est insuffisant. Renvoie 0 si un nombre valide ne peut pas être décodé.


int decode_s32(byte_offset: int) const 🔗

Décode un entier signé de 32 bits à partir des octets commençant après le décalage byte_offset. Échoue si le nombre d'octets est insuffisant. Renvoie 0 si un nombre valide ne peut pas être décodé.


int decode_s64(byte_offset: int) const 🔗

Décode un entier signé de 64 bits à partir des octets commençant après le décalage byte_offset. Échoue si le nombre d'octets est insuffisant. Renvoie 0 si un nombre valide ne peut pas être décodé.


int decode_u8(byte_offset: int) const 🔗

Décode un entier non signé de 32 bits à partir des octets commençant après le décalage byte_offset. Échoue si le nombre d'octets est insuffisant. Renvoie 0 si un nombre valide ne peut pas être décodé.


int decode_u16(byte_offset: int) const 🔗

Décode un entier non signé de 16 bits à partir des octets commençant après le décalage byte_offset. Échoue si le nombre d'octets est insuffisant. Renvoie 0 si un nombre valide ne peut pas être décodé.


int decode_u32(byte_offset: int) const 🔗

Décode un entier non signé de 32 bits à partir des octets commençant après le décalage byte_offset. Échoue si le nombre d'octets est insuffisant. Renvoie 0 si un nombre valide ne peut pas être décodé.


int decode_u64(byte_offset: int) const 🔗

Décode un entier non signé de 64 bits à partir des octets commençant après le décalage byte_offset. Échoue si le nombre d'octets est insuffisant. Renvoie 0 si un nombre valide ne peut pas être décodé.


Variant decode_var(byte_offset: int, allow_objects: bool = false) const 🔗

Décode un Variant à partir des octets commençant après le décalage byte_offset. Renvoie null si un variant valide ne peut être décodé ou si la valeur est dérivée d'Object et allow_objects vaut false.


int decode_var_size(byte_offset: int, allow_objects: bool = false) const 🔗

Décode la taille d'un Variant à partir des octets commençant après le décalage byte_offset. Requiert au moins 4 octets de données commençant à partir du décalage, échoue sinon.


PackedByteArray decompress(buffer_size: int, compression_mode: int = 0) const 🔗

Renvoie un nouveau PackedByteArray avec les données décompressées. Définit buffer_size à la taille des données non compressées. Définit le mode de compression en utilisant l'une des constantes de CompressionMode.

Note : La décompression n'est pas garantie de marcher avec des données non compressées par Godot, par exemple si les données compressées avec le mode de compression deflate n'ont pas de checksum ou d'entête.


PackedByteArray decompress_dynamic(max_output_size: int, compression_mode: int = 0) const 🔗

Renvoie un nouveau PackedByteArray avec les données décompressées. Réglez le mode de compression en utilisant l'une des constantes de CompressionMode. Cette méthode n'accepte que les modes de compression brotli, gzip et deflate

Cette méthode est potentiellement plus lente que decompress(), car elle peut avoir à réaffecter son tampon de sortie plusieurs fois en décompressant, alors que decompress() sait sa taille du tampon de sortie du début.

GZIP a un rapport de compression maximal de 1032:1, ce qui signifie qu'il est très possible pour une petite charge utile comprimée de décompresser en une sortie potentiellement très grande. Pour éviter cela, vous pouvez fournir une taille maximale que cette fonction est autorisée à attribuer en octets via max_output_size. Passer -1 permettra une sortie non limitée. Si une valeur positive est passée et que la décompression dépasse ce montant en octets, une erreur sera renvoyée.

Note : La décompression n'est pas garantie de marcher avec des données non compressées par Godot, par exemple si les données compressées avec le mode de compression deflate n'ont pas de checksum ou d'entête.


PackedByteArray duplicate() const 🔗

Crée une copie du tableau, et le renvoie.


void encode_double(byte_offset: int, value: float) 🔗

Encode un nombre flottant de 64 bits en octets à l'index du byte_offset-ème octet. Le tableau doit avoir au moins 8 octets d'espace alloué à partir du décalage.


void encode_float(byte_offset: int, value: float) 🔗

Encode un nombre flottant de 32 bits en octets à l'index du byte_offset-ème octet. Le tableau doit avoir au moins 4 octets d'espace alloué à partir du décalage.


void encode_half(byte_offset: int, value: float) 🔗

Encode un nombre flottant de 16 bits en octets à l'index du byte_offset-ème octet. Le tableau doit avoir au moins 2 octets d'espace alloué à partir du décalage.


void encode_s8(byte_offset: int, value: int) 🔗

Encode un entier signé de 8 bits (octet signé) à l'index du byte_offset-ème octet. Le tableau doit avoir au moins 1 octet d'espace alloué à partir du décalage.


void encode_s16(byte_offset: int, value: int) 🔗

Encode un entier signé de 16 bits en octets à l'index du byte_offset-ème octet. Le tableau doit avoir au moins 2 octets d'espace alloué à partir du décalage.


void encode_s32(byte_offset: int, value: int) 🔗

Encode un entier signé de 32 bits en octets à l'index du byte_offset-ème octet. Le tableau doit avoir au moins 4 octets d'espace alloué à partir du décalage.


void encode_s64(byte_offset: int, value: int) 🔗

Encode un entier signé de 64 bits en octets à l'index du byte_offset-ème octet. Le tableau doit avoir au moins 8 octets d'espace alloué à partir du décalage.


void encode_u8(byte_offset: int, value: int) 🔗

Encode un entier non-signé de 8 bits (un octet) à l'index du byte_offset-ème octet. Le tableau doit avoir au moins 1 octet d'espace alloué à partir du décalage.


void encode_u16(byte_offset: int, value: int) 🔗

Encode un entier non-signé de 16 bits en octets à l'index du byte_offset-ème octet. Le tableau doit avoir au moins 2 octets d'espace alloué à partir du décalage.


void encode_u32(byte_offset: int, value: int) 🔗

Encode un entier non-signé de 32 bits en octets à l'index du byte_offset-ème octet. Le tableau doit avoir au moins 4 octets d'espace alloué à partir du décalage.


void encode_u64(byte_offset: int, value: int) 🔗

Encode un entier non-signé de 64 bits en octets à l'index du byte_offset-ème octet. Le tableau doit avoir au moins 8 octets d'espace alloué à partir du décalage.


int encode_var(byte_offset: int, value: Variant, allow_objects: bool = false) 🔗

Encode un Variant en octets à l'index du byte_offset-ème octet. Une taille suffisante doit être allouée, selon la taille du variant encodé. Si allow_objects vaut false, les valeurs dérivées d'Object ne sont pas permises et seront sérialisées en tant qu'ID seulement.


bool erase(value: int) 🔗

Retire la première occurrence d'une valeur du tableau et renvoie true. Si la valeur n'existe pas dans le tableau, rien ne se passe et false est renvoyé. Pour supprimer un élément par index, utilisez remove_at() à la place.


void fill(value: int) 🔗

Attribue la valeur donnée à tous les éléments du tableau. Cela peut généralement être utilisé avec resize() pour créer un tableau avec une taille donnée et des éléments initialisés.


int find(value: int, from: int = 0) const 🔗

Recherche dans le tableau pour une valeur et renvoie son index ou -1 si elle n'est pas trouvée. Optionnellement, l'index de recherche initial peut être passé.


int get(index: int) const 🔗

Returns the byte at the given index in the array. If index is out-of-bounds or negative, this method fails and returns 0.

This method is similar (but not identical) to the [] operator. Most notably, when this method fails, it doesn't pause project execution if run from the editor.


String get_string_from_ascii() const 🔗

Convertit le tableau encodé ASCII/Latin-1 en String. Alternative rapide à get_string_from_utf8() si le contenu est en ASCII/Latin-1 seulement. Contrairement à la fonction UTF-8, cette fonction cartographie chaque octet à un caractère dans le tableau. Les séquences multi-octets ne seront pas interprétées correctement. Pour interpréter l'entrée utilisateur, utilisez toujours get_string_from_utf8(). C'est l'inverse de String.to_ascii_buffer().


String get_string_from_multibyte_char(encoding: String = "") const 🔗

Converts system multibyte code page encoded array to String. If conversion fails, empty string is returned. This is the inverse of String.to_multibyte_char_buffer().

The values permitted for encoding are system dependent. If encoding is empty string, system default encoding is used.

  • For Windows, see Code Page Identifiers .NET names.

  • For macOS and Linux/BSD, see libiconv library documentation and iconv --list for a list of supported encodings.


String get_string_from_utf8() const 🔗

Convertit le tableau encodé UTF-8 en String. Plus lent que get_string_from_ascii() mais prend en charge les données encodées UTF-8. Utilisez cette fonction si vous n'êtes pas sûr de la source des données. Pour l'entrée utilisateur, cette fonction doit toujours être préférée. Renvoie une chaîne vide si le tableau source n'est pas une chaîne UTF-8 valide. C'est l'inverse de String.to_utf8_buffer().


String get_string_from_utf16() const 🔗

Convertit le tableau encodé en UTF-16 en String. Si l'indicateur d'ordre des octets (BOM) est absent, le petit-boutiste est supposé. Renvoie une chaîne vide si le tableau source n'est pas une chaîne UTF-16 valide. C'est l'inverse de String.to_utf16_buffer().


String get_string_from_utf32() const 🔗

Convertit le tableau encodé UTF-32 en String. Renvoie une chaîne vide si le tableau source n'est pas une chaîne UTF-32 valide. C'est l'inverse de String.to_utf32_buffer().


String get_string_from_wchar() const 🔗

Convertit un tableau de caractères larges (wchar_t, UTF-16 sur Windows, UTF-32 sur d'autres plates-formes) en String. Renvoie une chaîne vide si le tableau source n'est pas une chaîne large valide. C'est l'inverse de String.to_wchar_buffer().


bool has(value: int) const 🔗

Renvoie true si le tableau contient value.


bool has_encoded_var(byte_offset: int, allow_objects: bool = false) const 🔗

Renvoie true si une valeur Variant valide peut être décodée au décalage d'octets byte_offset. Renvoie false sinon ou lorsque la valeur est dérivée d'Object et allow_objects vaut false.


String hex_encode() const 🔗

Renvoie une représentation hexadécimale de ce tableau en tant que String.

var tableau = PackedByteArray([11, 46, 255])
print(array.hex_encode()) # Affiche "0b2eff"

int insert(at_index: int, value: int) 🔗

Insérer un nouvel élément à une position donnée dans le tableau. La position doit être valide, ou à la fin du tableau (idx == size()).


bool is_empty() const 🔗

Renvoie true si le tableau est vide.


bool push_back(value: int) 🔗

Ajoute un élément à la fin du tableau.


void remove_at(index: int) 🔗

Retire l'élément du tableau à l'index donné.


int resize(new_size: int) 🔗

Définit la taille du tableau. Si le tableau est agrandi, réserve des éléments à la fin du tableau. Si le tableau est rétrécit, tronque le tableau à la nouvelle taille. Appeler resize() une fois et attribuer les nouvelles valeurs est plus rapide que l'ajout de nouveaux éléments un par un.

Renvoie @GlobalScope.OK sur le succès, ou une des constantes Error suivantes si cette méthode échoue : @GlobalScope.ERR_INVALID_PARAMETER si la taille est négative, ou @GlobalScope.ERR_OUT_OF_MEMORY si les allocations échouent. Utilisez size() pour trouver la taille réelle du tableau après le redimensionnement.


void reverse() 🔗

Inverse l'ordre des éléments du tableau.


int rfind(value: int, from: int = -1) const 🔗

Cherche le tableau en ordre inverse. Optionnellement, un index de démarrage de recherche peut être passé. Si négatif, l'indice de démarrage est considéré par rapport à la fin du tableau.


void set(index: int, value: int) 🔗

Change l'octet à la position donnée.


int size() const 🔗

Renvoie le nombre d'éléments dans le tableau.


PackedByteArray slice(begin: int, end: int = 2147483647) const 🔗

Renvoie la tranche du PackedByteArray, de begin (inclusive) à end (exclusive), en tant que nouveau PackedByteArray.

La valeur absolue de begin et end sera bornée à la taille du tableau, de sorte que la valeur par défaut pour end le fait trancher à la taille du tableau par défaut (c.a.d. arr.slice(1) est un raccourci pour arr.slice(1, arr.size())).

Si begin ou end sont négatifs, ils seront par rapport à la fin du tableau (c.a.d. arr.slice(0, -2) est un raccourci pour arr.slice(0, arr.size() - 2)).


void sort() 🔗

Tris les éléments du tableau dans l'ordre croissant.


PackedColorArray to_color_array() const 🔗

Returns a copy of the data converted to a PackedColorArray, where each block of 16 bytes has been converted to a Color variant.

Note: The size of the input array must be a multiple of 16 (size of four 32-bit float variables). The size of the new array will be byte_array.size() / 16. If the original data can't be converted to Color variants, the resulting data is undefined.


PackedFloat32Array to_float32_array() const 🔗

Renvoie une copie des données converties en un tableau PackedFloat32Array, où chaque bloc de 4 octets a été converti en un flottant de 32 bits (float en C++).

La taille du tableau d'entrée doit être un multiple de 4 (taille d'un flottant 32 bits). La taille du nouveau tableau sera de byte_array.size() / 4.

Si les données d'origine ne peuvent pas être converties en flottants 32 bits, les données résultantes ne sont pas définies.


PackedFloat64Array to_float64_array() const 🔗

Renvoie une copie des données converties en un tableau PackedFloat64Array, où chaque bloc de 8 octets a été converti en un flottant de 64 bits (double en C++, float pour Godot).

La taille du tableau d'entrée doit être un multiple de 8 (taille d'un flottant 64 bits). La taille du nouveau tableau sera de byte_array.size() / 8.

Si les données d'origine ne peuvent pas être converties en flottants 64 bits, les données résultantes ne sont pas définies.


PackedInt32Array to_int32_array() const 🔗

Renvoie une copie des données converties en un tableau PackedInt32Array, où chaque bloc de 4 octets a été converti en un entier signé 32 bits (int32_t en C++)

La taille du tableau d'entrée doit être un multiple de 4 (taille d'un entier 32 bits). La taille du nouveau tableau sera de byte_array.size() / 4.

Si les données d'origine ne peuvent pas être converties en entiers signés 32 bits, les données résultantes ne sont pas définies.


PackedInt64Array to_int64_array() const 🔗

Renvoie une copie des données converties en un tableau PackedInt64Array, où chaque bloc de 8 octets a été converti en un entier signé 64 bits (int64_t en C++, int dans Godot)

La taille du tableau d'entrée doit être un multiple de 8 (taille d'un entier 64 bits). La taille du nouveau tableau sera de byte_array.size() / 8.

Si les données d'origine ne peuvent pas être converties en entiers signés 64 bits, les données résultantes ne sont pas définies.


PackedVector2Array to_vector2_array() const 🔗

Returns a copy of the data converted to a PackedVector2Array, where each block of 8 bytes or 16 bytes (32-bit or 64-bit) has been converted to a Vector2 variant.

Note: The size of the input array must be a multiple of 8 or 16 (depending on the build settings, see Vector2 for more details). The size of the new array will be byte_array.size() / (8 or 16). If the original data can't be converted to Vector2 variants, the resulting data is undefined.


PackedVector3Array to_vector3_array() const 🔗

Returns a copy of the data converted to a PackedVector3Array, where each block of 12 or 24 bytes (32-bit or 64-bit) has been converted to a Vector3 variant.

Note: The size of the input array must be a multiple of 12 or 24 (depending on the build settings, see Vector3 for more details). The size of the new array will be byte_array.size() / (12 or 24). If the original data can't be converted to Vector3 variants, the resulting data is undefined.


PackedVector4Array to_vector4_array() const 🔗

Returns a copy of the data converted to a PackedVector4Array, where each block of 16 or 32 bytes (32-bit or 64-bit) has been converted to a Vector4 variant.

Note: The size of the input array must be a multiple of 16 or 32 (depending on the build settings, see Vector4 for more details). The size of the new array will be byte_array.size() / (16 or 32). If the original data can't be converted to Vector4 variants, the resulting data is undefined.


Descriptions des opérateurs

bool operator !=(right: PackedByteArray) 🔗

Renvoie true si le contenu des tableaux diffère.


PackedByteArray operator +(right: PackedByteArray) 🔗

Renvoie un nouveau PackedByteArray avec le contenu de right ajouté à la fin de ce tableau. Pour une meilleure performance, envisagez d'utiliser append_array() à la place.


bool operator ==(right: PackedByteArray) 🔗

Renvoie true si le contenu des deux tableaux est le même, c'est-à-dire qu'ils ont tous leurs octets égaux aux indices correspondants.


int operator [](index: int) 🔗

Renvoie l'octet à la position index. Les indices négatifs peuvent être utilisés pour accéder aux éléments à partir de la fin. L'utilisation d'un index hors des limites du tableau entraînera une erreur.

Notez que l'octet est renvoyé en tant qu'entier 64 bits int.