Add a function to convert hexadecimal QByteArrays to integers.
This commit is contained in:
parent
c4d9ddb602
commit
bc4c6cfcaa
34
socket.cpp
34
socket.cpp
|
@ -216,11 +216,7 @@ bool Socket::parseReply(QByteArray reply)
|
||||||
switch (datagram) {
|
switch (datagram) {
|
||||||
case QueryAll:
|
case QueryAll:
|
||||||
case Discover: {
|
case Discover: {
|
||||||
QByteArray timeArray = reply.right(5).left(4);
|
uint32_t time = hexToInt(reply.right(5).left(4));
|
||||||
QDataStream stream(&timeArray, QIODevice::ReadOnly);
|
|
||||||
stream.setByteOrder(QDataStream::LittleEndian);
|
|
||||||
uint32_t time;
|
|
||||||
stream >> time;
|
|
||||||
socketDateTime.setDate(QDate(1900, 01, 01)); // midnight 1900-01-01
|
socketDateTime.setDate(QDate(1900, 01, 01)); // midnight 1900-01-01
|
||||||
socketDateTime.setTime(QTime(0, 0, 0));
|
socketDateTime.setTime(QTime(0, 0, 0));
|
||||||
socketDateTime = socketDateTime.addSecs(time);
|
socketDateTime = socketDateTime.addSecs(time);
|
||||||
|
@ -280,10 +276,7 @@ bool Socket::parseReply(QByteArray reply)
|
||||||
++index;
|
++index;
|
||||||
countdownEnabled = reply.mid(index, 2) == QByteArray::fromHex("01:00");
|
countdownEnabled = reply.mid(index, 2) == QByteArray::fromHex("01:00");
|
||||||
index += 2;
|
index += 2;
|
||||||
QByteArray countDown = reply.mid(index, 2);
|
countdown = hexToInt(reply.mid(index, 2));
|
||||||
QDataStream stream(&countDown, QIODevice::ReadOnly);
|
|
||||||
stream.setByteOrder(QDataStream::LittleEndian);
|
|
||||||
stream >> countdown;
|
|
||||||
Q_EMIT stateChanged();
|
Q_EMIT stateChanged();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -307,10 +300,31 @@ bool Socket::parseReply(QByteArray reply)
|
||||||
}
|
}
|
||||||
|
|
||||||
// length in bytes
|
// length in bytes
|
||||||
QByteArray Socket::intToHex(uint16_t decimal, unsigned int length, bool littleEndian) {
|
QByteArray Socket::intToHex(unsigned int decimal, unsigned int length, bool littleEndian) {
|
||||||
QByteArray hex;
|
QByteArray hex;
|
||||||
QDataStream stream(&hex, QIODevice::WriteOnly);
|
QDataStream stream(&hex, QIODevice::WriteOnly);
|
||||||
littleEndian ? stream.setByteOrder(QDataStream::LittleEndian) : stream.setByteOrder(QDataStream::BigEndian);
|
littleEndian ? stream.setByteOrder(QDataStream::LittleEndian) : stream.setByteOrder(QDataStream::BigEndian);
|
||||||
stream << decimal;
|
stream << decimal;
|
||||||
return littleEndian ? hex.left(length) : hex.right(length);
|
return littleEndian ? hex.left(length) : hex.right(length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Socket::hexToInt(QByteArray hex, bool littleEndian) {
|
||||||
|
QDataStream stream(&hex, QIODevice::ReadOnly);
|
||||||
|
littleEndian ? stream.setByteOrder(QDataStream::LittleEndian) : stream.setByteOrder(QDataStream::BigEndian);
|
||||||
|
switch (hex.length()) {
|
||||||
|
case 1:
|
||||||
|
uint8_t value;
|
||||||
|
stream >> value;
|
||||||
|
return value;
|
||||||
|
case 2:
|
||||||
|
uint16_t value2;
|
||||||
|
stream >> value2;
|
||||||
|
return value2;
|
||||||
|
case 4:
|
||||||
|
uint32_t value4;
|
||||||
|
stream >> value4;
|
||||||
|
return value4;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
3
socket.h
3
socket.h
|
@ -82,7 +82,8 @@ private:
|
||||||
}
|
}
|
||||||
void run();
|
void run();
|
||||||
void writeSocketData(QByteArray socketName, QByteArray remotePassword, QByteArray timeZone, uint16_t countdown);
|
void writeSocketData(QByteArray socketName, QByteArray remotePassword, QByteArray timeZone, uint16_t countdown);
|
||||||
QByteArray intToHex(uint16_t value, unsigned int length, bool littleEndian = true);
|
QByteArray intToHex(unsigned int value, unsigned int length, bool littleEndian = true);
|
||||||
|
int hexToInt(QByteArray value, bool littleEndian = true);
|
||||||
|
|
||||||
QByteArray commandID[MaxCommands];
|
QByteArray commandID[MaxCommands];
|
||||||
QByteArray datagram[MaxCommands];
|
QByteArray datagram[MaxCommands];
|
||||||
|
|
Loading…
Reference in New Issue