2

16 進文字列:

var str = [0x6A, 0xE8, 0x05, 0x01, 0x00, 0x01, 0xD9, 0xDC, 0x0A, 0x09];
byte = '';
for (var i=0; i < str.length; i++) {
    byte += String.fromCharCode( parseInt(str[i], 16).toString(16) );
}

しかし受信機ショー:

6A C3A8 05 01 00 01 C399 C39C 0A 09

それを2バイトに保つ方法はありますか?または、私のコードが間違っているかもしれません。nodejsの?

※スクリプトを更新しました。私はnodejsを初めて使用し、「忙しい」日にデータが不足しているため、nodejsが提供する非ブロックイベントを確認するのが好きです。binascii.(un)hexlify および PHP mbstring (un)pack (Web ビュー用) を使用して、Python で動作するスクリプトを取得しました。

期待:

6A E8 05 01 00 01 D9 DC 0A 09
4

2 に答える 2

4

もう一度デコードすると、コードが機能しているようです。ただし、Javacript のオブジェクトに対する for() ループには注意してください。また、オブジェクトのプロパティを反復します。

var str = [0x6A, 0xE8, 0x05, 0x01, 0x00, 0x01, 0xD9, 0xDC, 0x0A, 0x09];
byte = '';
for (var i=0; i < str.length; i++) {
    byte += String.fromCharCode( parseInt(str[i], 16).toString(16) );
}

var hexarrayout = [];
for (var i=0; i<byte.length; i++) {
    hexarrayout.push(byte.charCodeAt(i).toString(16));
}

alert(hexarrayout);

http://jsfiddle.net/ycG4n/の例

あなたの問題は、受信者に送信するときの utf8<=>iso-.../ascii/etc 変換の問題によく似ています。ここでは、1 バイトの文字列文字の一部が 2 バイトの文字に変換されます。UTF-8 の部分的な下位互換性のため、一部の 16 進数値は 1 バイトのままになります。

于 2012-12-18T22:10:04.637 に答える
2

コードを書いていても0x6A、JavaScript は自動的にその値を 106 として認識します。これはすでに数値であるため、parseInt()何もせず、削除することができます。

あなたはこれをしたいだけかもしれません:

var str = [0x6A,0xE8...];
var byte = String.fromCharCode.apply(null,str);
于 2012-12-18T22:08:02.240 に答える