2012-07-19 4 views
0

서버 쪽에서 나는 16 비트 정수 (0에서 639까지)를 가져 와서 두 개의 8 비트 문자로 분리하여 버퍼를 공급합니다 (1280 바이트). 그런 다음 TCP-IP를 통해 클라이언트로 전송됩니다.LWIP 서버 응답에서 16 비트 정수 가져 오기

.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); 

나는 서버에서 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�{�|�}�~������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������  

"을 # $ %의 &를 -/:; <을 => @? ABCDEFGHIJKLMNOPQRSTUVWXYZ []^_`abcdefghijklmnopqrstuvwxyz {|} ~

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

.js 코드를 실행 한 후 예상대로 올바른 번호를 0에서 127 (0,1,2, ... 127) ,하지만 128에서 256까지, 나는 128,129,130 ​​... 256 대신에 255로 모든 숫자를 얻는다. 모든 숫자가 괜찮은 256 다음에 (257, .... 639). 문제는 charCodeAt() 함수와 관련이 있다고 생각합니다. 유니 코드를 반환하는 이유는 서버가 "129,130,131 ... 255"를 보내고 있기 때문에 어떤 이유에서든 동일한 문자가 있다고 생각하면 항상 255를 반환하지만 불가능합니다. 무슨 일이 일어날 지 아무 생각 없어? 실제 솔루션을 사용하기 전에 JSON 객체에서 16 비트 정수를 직접 가져 오려고했지만 LUT와의 종속성을 제거 할 수 없었습니다. LUT를 사용하지 않고 o.responseText = "abcdefgh ..."에 각 문자의 8 비트를 어떻게 가져 와서 동등한 ASCII 코드를 찾은 다음 이진 표현을 찾을 수 있습니까? 나는 비트 연산자를 사용하여 가능하다고 생각한다. &하지만이 경우 여전히 이진수를 정수로 변환해야한다. 자바 스크립트의 문자열에서 비트 연산을 직접 수행 할 수 있는가?

답변

0

데이터가 utf8로 표시되는 것 같습니다. utf8은 ascii 호환이므로 모든 ASCII 문자는 잘 표시됩니다 (최대 127 자). 나머지 문자는 utf8에서 유효하지 않으므로 데이터를 표시하는 프로그램이 이러한 잘못된 문자를 잘못된 문자 대체 문자 으로 바꿉니다. 클라이언트 (수신 프로그램) 인코딩은 iso-8859-1로

+0

무사 감사합니다. 인코딩을 ISO-8859-1로 변경했지만 여전히 동일한 결과가 있습니다. Fire Bug가 잘못된 문자로 표시하더라도 원하는 정보 (예 : 0에서 127 사이의 숫자)를 검색 할 수 있습니다. 문제는 여전히 128에서 256 사이입니다. – Felipe

관련 문제