Oui, ils sont à peu près équivalents. Java stocke bien sûr la longueur du tableau et effectue des contrôles sur chaque référence de tableau. C/C++ ne pas, au moins pas sans travail supplémentaire.
J'ai tendance à utiliser int8_t
et uint8_t
lorsqu'ils traitent avec des valeurs d'octets numériques en C (y compris <stdint.h>
pour obtenir les typedefs) (voir http://www.cplusplus.com/reference/cstdint/ pour plus). C'est équivalent à signed char
et unsigned char
, mais je trouve qu'il est plus explicite que le code travaille sur des octets. Les deux int8_t
et signed char
sont équivalents à Java byte
car toutes les valeurs numériques dans Java sont signées.
Le format big/little-endian n'est utilisé que lorsque vous voulez écrire une valeur multi-octets dans le tableau. Si vous voulez être du bon côté, suivez le même schéma que vous utiliseriez en Java. Par exemple.
/* example of storing in big-endian */
bytes[i+0] = (int8_t)(myint >> 24);
bytes[i+1] = (int8_t)(myint >> 16);
bytes[i+2] = (int8_t)(myint >> 8);
bytes[i+3] = (int8_t)(myint);
Si vous voulez éviter les quarts de travail supplémentaires et écrire directement au tableau d'octets, vous pouvez lancer le pointeur de tableau d'octets à un tableau int et le magasin, mais vous courrez dans deux problèmes potentiels: (1) problème endian que vous avez souligné (résoluble avec un htonl
sauf si vous ne changez pas d'endian, voir http://pubs.opengroup.org/onlinepubs/007908775/xns/htonl.html), et (2) des problèmes d'alignement de stockage. Si vous essayez de stocker/lire une valeur non alignée, sur certains systèmes, vous obtiendrez une erreur de bus et votre programme tombera en panne.
/* only do this if 'i' is a multiple of 4! */
*((uint32_t*)&bytes[i]) = htonl(myint);
En C++, utilisez 'std :: vector'. –
L'endianness est seulement un problème si vous essayez d'écrire des valeurs multi-octets dans un tableau d'octets; vous semblez seulement demander à écrire des octets simples dans le tableau. Peut-être voulez-vous dire que 'xyz' est une valeur plus grande (taille' no', peut-être?) Et que vous voulez écrire tous ses octets dans le tableau? En outre, C et C++ sont des langages très différents; De quoi parlez-vous? –