0

在服务器端,我有以下循环,它需要一个 16 位整数(从 0 到 639)并将其分成两个 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,我得到的所有数字都等于 255 而不是(128,129,130​​... 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 回答