무선 연결을 통해 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 소켓을 사용하여이 메시지를 작성하는 방법을 알아 냈습니까?
있습니까? (예를 들어,이 예에서 메시지를 보냈습니다. 장치가 그것을 "확인"하기 위해 다시 보냈습니다. 제대로 읽었습니까? 내가 보낸 것과 같은 것을 알기 위해 어떻게 읽어야합니까?) – user3830784
비슷한 방식으로 당신은'QTcpSocket'의'readyRead' 신호에 연결된 슬롯에서'socket.read ((char *) message, 12);'를 사용할 수 있습니다. 'QTcpSocket'을 비동기 적으로 사용하는 예제는 다음을보십시오 : http://stackoverflow.com/questions/27787130/qt-even-processing-while-waitforconnected-is-running/27793246#27793246 – Nejat