【问题标题】:Retrieving 16-bit integer from LWIP server response从 LWIP 服务器响应中检索 16 位整数
【发布时间】:2012-07-19 07:19:19
【问题描述】:

在服务器端,我有以下循环,它需要一个 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响应:

  �����������   �
 ���
  ������������������� �!�"�#�$�%�&�'�(�)�*�+�,�-�.�/        �  0�1�2�3�4�5�6�7�8�9�:�;�<�=�>�?�@�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�������������

运行 .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 脚本中的字符串执行按位运算?

【问题讨论】:

    标签: javascript c integer yui ascii


    【解决方案1】:

    您的数据似乎显示为 utf8。 utf8 与 ascii 兼容,因此所有 ascii 字符都显示正常(最多 127 个字符),其余字符在 utf8 中无效,因此显示数据的程序将这些无效字符替换为无效字符替换字符 ,尝试将客户端(接收程序)编码更改为 iso-8859-1。

    【讨论】:

    • 谢谢穆萨。我将编码更改为 ISO-8859-1,但仍然有相同的结果。即使 Fire Bug 将其显示为无效字符,我也可以检索我想要的信息,例如 0 到 127 之间的数字。问题仍然在 128 到 256 之间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多