0

サーバー側には、次のループがあります。16 ビット整数 (0 から 639) を取り、それを 2 つの 8 ビット文字に分割して、バッファー (1280 バイト) にフィードします。これは、TCP-IP 経由でクライアントに送信されます。

.c

unsigned int data2[1000]; 
char *p;
len = generate_http_header(buf, "js", 1280);
p = buf + len;
for (j=0; j<640; j++)
{
    char_out[1]=(unsigned char)(data2[j]&0x00FF);
    char_out[0]=(unsigned char)((data2[j]>>8)&(0x00FF));
    *p=char_out[0];
    p=p+1;
    *p=char_out[1];
    p=p+1;
}
....
tcp_write(pcb, buf, len, 1);
tcp_output(pcb);

クライアント側では、JSON オブジェクトから 16 ビット整数を取得したいと考えています。私はこの解決策を思いつきましたが、何かが起こっていて、すべての整数値 (0 から 639) を取得できません。

.js
var bin=o.responseText;
for(i=0;i<1000;i=i+2)
{
    a=bin[i].charCodeAt();
    b=bin[i+1].charCodeAt();

    // Get binary representation.
    a=parseInt(a).toString(2);
    a=parseInt(a);
    //alert('a(bin) before:'+a);

    b=parseInt(b).toString(2);
    b=parseInt(b);

    //padding zeros left.
    a=pad(a,8);
    b=pad(b,8)

    //Concatenate and convert to string.
    a=a.toString();
    b=b.toString();
    c=a+b;

    //Convert to decimal
    c=parseInt(c,2);
    //alert('DECIMAL FINAL NUMBER:'+c)
    fin=fin+c.toString();
}

alert('FINAL NUMBER'+fin);

Fire BUG を使用して、サーバーからの HTTP 応答を確認しました。

  �����������   �
 ���
  ������������������� �!�"�#�$�%�&amp;�'�(�)�*�+�,�-�.�/        �  0�1�2�3�4�5�6�7�8�9�:�;�&lt;�=�&gt;�?�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\  �]�    ^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������    

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~���������������� ������������������������������������������������ ������������������������������������������������ �������������

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUV�����������QR���� ��Ps������� �����$����������������P������������</p>

.js コードを実行した後、0 から 127 (0,1,2,...127) までの正しい数値が得られますが、128 から 256 では、(128,129,130​​... ではなく) すべての数値が 255 に等しくなります。 256). 256 の後、すべての番号は問題なく、連続しています (257,....639)。問題は、文字の Unicode を返す関数 charCodeAt() に関連していると思います。何らかの理由で、同じ文字を持っていることを考慮して常に 255 を返していますが、サーバーが「129,130​​,131...255」を送信しているため、これは不可能です。何が起こっているのでしょうか?実際のソリューションを使用する前に、JSON オブジェクトから直接 16 ビット整数を取得しようとしましたが、LUT で依存関係を削除できませんでした。o.responseText="abcdefgh..." で各文字の 8 ビットを取得するにはどうすればよいですか LUT を使用せずに、同等の ASCII コードを見つけてからバイナリ表現を見つけますか? ビット単位の演算子 & を使用して可能だと思いますが、この場合は、最初に同等のバイナリに変換してから整数に変換する必要があります。Java スクリプトの文字列に対してビット単位の操作を直接実行するにはどうすればよいですか?

4

1 に答える 1

0
于 2012-07-19T07:33:52.033 に答える