5

myNum32ビット値を含む変数を持っています。それを呼び出しましょう。文字列の各バイトがの一部に対応する4バイトの文字列に変換したいと思いますmyNum

私は次のようなことをしようとしています(これは機能しません):

var myNum = someFunctionReturningAnInteger();
var str = "";

str += String.charCodeFrom((myNum >>> 24) & 0xff);
str += String.charCodeFrom((myNum >>> 16) & 0xff);
str += String.charCodeFrom((myNum >>> 8) & 0xff);
str += String.charCodeFrom(myNum & 0xff);

たとえば、myNumが350に等しい場合、wiresharkで調べると、、、、のstrよう0x00になります。0x000x010x5e

charCodeFrom()個々のバイトの値が0x7f未満の場合にのみ、必要な処理を実行します。私がやろうとしていることをブラウザに依存しない方法で実行する方法はありますか?

ありがとう

4

1 に答える 1

3

要するに:あなたはできません。

長い間:これは、値が> =の文字列内の文字が0x80、ブラウザのデフォルトのエンコーディング(おそらくUTF-8ですが、「ランダム」なものを選択するブラウザが見つかる場合があります)を使用してUnicodeとしてエンコードされるために発生します。たとえば、値を指定して「バイト」を送信すると、ネットワーク上に\x80表示される可能性があります\xC2\x80( `" \ xC2 \ x80 ".decode(" utf-8 ")== u" \ u0080 ")。

ページエンコーディングをCP1252のような8ビットエンコーディングに設定できる場合があります。これにより、一部ブラウザでは、星が正しく整列している場合)、JavaScript文字列をエンコードするときに同じエンコーディングを使用するようにブラウザを誘導できます。クロスブラウザ互換性が保証されます。

より信頼性の高いオプションは次のとおりです。

  • JSからの文字列をユニコードとしてデコードするようにエンドポイントを設定してから、それらをバイトとして再エンコードします(Pythonでは、次のようになります"".join(chr(ord(ub)) for ub in your_unicode_string)
  • 「バイト」を整数の配列として送信します。var bytes = [ (myNum >> 24) & 0xFF, … ];
于 2012-09-07T19:14:29.687 に答える