簡體   English   中英

從LWIP服務器響應中檢索16位整數

[英]Retrieving 16-bit integer from LWIP server response

在服務器端,我有以下循環,它采用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腳本中直接對字符串執行按位運算?

看來您的數據顯示為utf8。 utf8與ascii兼容,因此所有顯示的ascii字符都可以正常顯示(最多127個字符),其余字符在utf8中無效,因此顯示數據的程序將這些無效字符替換為無效字符替換字符 ,請嘗試更改客戶端(接收程序)編碼為iso-8859-1。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM