2015-01-15 3 views
0

무선 연결을 통해 TCP를 통해 통신을 시도하는 내장 장치가 있습니다. 다음은 장치가 예상하는 데이터 구조입니다.QTcpSocket을 사용하여 바이트 보내기

char[] = { 0x55, 0x55, 0x55, 0x55 //header block 
    //start data here 
    0x01, 0x00, 0x00, 0x00 //example data 
    //end data block 
    0xAA, 0xAA, 0xAA, 0xAA //footer 
    }; 

QTcpSocket을 사용하여이 데이터를 쓰려고합니다. QTcpSocket을 사용하면 char 데이터 또는 QByteArray를 쓸 수 있지만이 데이터를 이러한 형식으로 저장하려고하면 실패합니다. 데이터를 성공적으로 저장할 수있는 유일한 방법은 서명되지 않은 char 배열입니다. 무슨 뜻인지의

예 :

char message[12] = { 
    0x55, 0x55, 0x55, 0x55, 
    0x01, 0x00, 0x00, 0x00, 
    0xAA, 0xAA, 0xAA, 0xAA}; 

그러나,이 메시지 블록은 나에게 오류

C4309: 'initializing' : truncation of constant value. 

를 제공하고이 데이터를 인쇄 할 때, 그것은으로 나오는 :

U U U U 
r 

r은 실제 문자보다 정사각형의 가장자리와 비슷 함

,363,210

이 특정 문제는 인쇄 할 때 다음 데이터 나온다 서명 숯불

unsigned char message[12] = { 
    0x55, 0x55, 0x55, 0x55, 
    0x01, 0x00, 0x00, 0x00, 
    0xAA, 0xAA, 0xAA, 0xAA}; 

에 문자의 배열을 변화시킴으로써 해결된다

85 85 85 85 
1 0 0 0 
170 170 170 170 

이 장치 내가 형식과 일치 말하고있는 것은 기대하고있다. 나는이 형식의 데이터를 넣을 경우, QTcpSocket은 좋아하지 않는다, 다시로 응답

C2664: 'qint64 QIODevice::write(const QByteArray &)': cannot convert argument 1 
from 'unsigned char[20]' to 'const char *' 

내가 QTcpSocket과에 걸려 데이터를 전송하는 방법이 있나요, 아니면 제가해야하나요 Windows 소켓을 사용하여이 메시지를 작성하는 방법을 알아 냈습니까?

답변

1

는 당신은 단순히 char *으로 캐스팅 할 수 있습니다 다음 QTcpSocket에서 같은 형식의 데이터를 읽기위한 유사한 쉽게 변환이

qint64 ret = socket.write((char *)message, 12); 
+0

있습니까? (예를 들어,이 예에서 메시지를 보냈습니다. 장치가 그것을 "확인"하기 위해 다시 보냈습니다. 제대로 읽었습니까? 내가 보낸 것과 같은 것을 알기 위해 어떻게 읽어야합니까?) – user3830784

+1

비슷한 방식으로 당신은'QTcpSocket'의'readyRead' 신호에 연결된 슬롯에서'socket.read ((char *) message, 12);'를 사용할 수 있습니다. 'QTcpSocket'을 비동기 적으로 사용하는 예제는 다음을보십시오 : http://stackoverflow.com/questions/27787130/qt-even-processing-while-waitforconnected-is-running/27793246#27793246 – Nejat