У меня есть встроенное устройство, с которым я пытаюсь связаться через TCP по беспроводному соединению. Ниже представлена структура данных, которые ожидает устройство:
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 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 больше похожа на край квадрата, чем на настоящую букву
Эта конкретная проблема устраняется путем изменения массива с char на unsigned char.
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?