正在从LWIP服务器响应中检索16位整数

Retrieving 16-bit integer from LWIP server response

本文关键字:检索 16位 整数 响应 服务器 LWIP      更新时间:2023-12-13

在服务器端,我有以下循环,它取一个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[]^_`abcdefghijklmnopqrstuvxyz{|}~���������������������������������������������������������������������������������������������������������������������������������

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

运行.js代码后,我得到了从0到127(0,1,2,…127)的正确数字,但从128到256,我得到的所有数字都等于255,而不是(128129130…256)。在256之后,每个数字都可以按顺序(257,…639)。我认为问题与函数charCodeAt()有关,该函数返回字符的Unicode。出于某种原因,考虑到我有相同的字符,它总是返回255,但这是不可能的,因为服务器正在发送"129130131…255"。知道会发生什么吗?在使用实际解决方案之前,我尝试直接从JSON对象中检索16位整数,但无法使用LUT删除依赖项。如何在o.responseText="abcdefgh…"中获得每个字符的8位,而不使用LUT来查找等效的ASCII代码,然后再查找二进制表示?我认为使用位运算符&但在这种情况下,仍然需要首先转换为二进制等价物,然后转换为整数。如何在java脚本中直接对字符串执行逐位操作?

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