在服务器端,我有以下循环,它需要一个 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�������������</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 脚本中的字符串执行按位运算?