111 votes

Comment convertir une chaîne en Bytearray

Comment puis-je convertir une chaîne dans bytearray en utilisant Javascript. La sortie devrait être équivalente au code C # ci-dessous.

 UnicodeEncoding encoding = new UnicodeEncoding();
byte[] bytes = encoding.GetBytes(AnyString);
 

Comme UnicodeEncoding est par défaut UTF-16 avec Little-Endianness.

Edit: J'ai l'obligation de faire correspondre le côté client généré par bytearray avec celui généré par le côté serveur à l'aide du code C # ci-dessus.

31voto

BrunoLM Points 26573

Exemple sur jsFiddle

 var str = "Hello";
var bytes = [];

for (var i = 0; i < str.length; ++i)
{
    bytes.push(str.charCodeAt(i));
}

alert(bytes); // 72,0,101,0,108,0,108,0,111,0
 

Cela correspond à l'exemple de votre commentaire. C'est en fait le même code en ajoutant 0 après chaque caractère.

16voto

hgoebl Points 2410

Je suppose que C # et Java produisent des tableaux d'octets égaux. Si vous avez des caractères non-ASCII, il ne suffit pas d'ajouter un 0. Mon exemple contient quelques caractères spéciaux:

 var str = "Hell ö € Ω  

0voto

Whosdr Points 11

La meilleure solution que j'ai trouvée sur place (bien que probablement brute) serait:

 String.prototype.getBytes = function() {
    var bytes = [];
    for (var i = 0; i < this.length; i++) {
        var charCode = this.charCodeAt(i);
        var cLen = Math.ceil(Math.log(charCode)/Math.log(256));
        for (var j = 0; j < cLen; j++) {
            bytes.push((charCode << (j*8)) & 0xFF);
        }
    }
    return bytes;
}
 

Bien que je remarque que cette question est ici depuis plus d'un an.

0voto

Anton I. Sipos Points 1180

Si vous utilisez underscore.js , vous pouvez simplifier la réponse la plus votée à cet oneliner:

 var bytes = _.map(str.split(''), function(c) {return c.charCodeAt(0)});
 

-1voto

mweaver Points 192

Voici la même fonction que celle publiée par @BrunoLM et convertie en une fonction prototype de chaîne:

 String.prototype.getBytes = function () {
  var bytes = [];
  for (var i = 0; i < this.length; ++i) {
    bytes.push(this.charCodeAt(i));
  }
  return bytes;
};
 

Si vous définissez la fonction en tant que telle, vous pouvez appeler la méthode .getBytes () sur n’importe quelle chaîne:

 var str = "Hello World!";
var bytes = str.getBytes();
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X