Comment créer un objet de chaîne à partir d'un tableau d'octets
byte arr[MAX_SIZE]; // Java
où l'un des éléments de tableau est un octet de terminaison C Null? Est-ce aussi simple que d'appeler
String str = new String( arr );
Le constructeur de cordes peut-il savoir automatiquement au caractère NULL terminant? Tous les octets après que l'octet NULL soit (éventuellement) des ordures que je ne veux pas inclure dans la chaîne. La dernière réponse sous analyse d'analyse d'octet d'octet de longueur de longueur inconnue suggère de boucler dans le tableau et à trouver manuellement le caractère de terminaison null, mais je me demandais si le constructeur de string le fera automatiquement. J'assume également que le brandie par défaut du système sera utilisé sur toutes les extrémités.
byte arr[] = ...
Charset charset = ...
int i;
for (i = 0; i < arr.length && arr[i] != 0; i++) { }
String str = new String(arr, 0, i, charSet);
Remarques:
Il est généralement judicieux d'utiliser un paramètre Charset explicite de sorte que votre application ne dépend pas de la liste de caractères/codage par défaut de la plate-forme.
Cela ne fonctionnera pas pour certains caractères. Par exemple, une chaîne codée UTF-16 ne peut pas être représentée en toute sécurité comme une séquence d'octets à terminaison zéro, car de nombreuses unités de code contiennent des octets zéro. (D'autre part, UTF-8 est correct à condition que la chaîne ne contienne aucune instance de point de code zéro; voir CAN UTF-8 contient zéro octet? ) ==) ==) ==)
... Mais je me demandais si le constructeur de string le fera automatiquement.
Non, ils ne le feront pas. (Ne me demande pas "... Lisez le Javadoc :-))
J'assume également que le brandie par défaut du système sera utilisé sur toutes les extrémités.
Si vous ne spécifiez pas de caractères, le Java Platform's Platform sera utilisé. Ceci est probablement le système Par défaut, mais ce n'est pas garanti.
que dis-tu de ça:
String str = new String(arr).split("\0")[0];
essayez ceci: string s = nouvelle chaîne (arr) .trim ()