correct byte-order for integer read

This commit is contained in:
Alexey Shcherbakov 2012-09-30 16:12:20 +06:00
parent afe5a94c8c
commit b2dbd2a85c
3 changed files with 52 additions and 40 deletions

1
.gitignore vendored
View File

@ -1,4 +1,5 @@
*.user *.user
*.ncb *.ncb
*.suo
/Debug /Debug
/GeneratedFiles /GeneratedFiles

View File

@ -9,7 +9,7 @@ void myMessageOutput(QtMsgType type, const char *msg)
switch (type) { switch (type) {
case QtDebugMsg: case QtDebugMsg:
//fprintf(stderr, "# %s\n", msg); fprintf(stderr, "# %s\n", msg);
break; break;
case QtWarningMsg: case QtWarningMsg:

View File

@ -55,11 +55,6 @@ void QAMQP::Frame::Base::readHeader( QDataStream & stream )
stream >> channel_; stream >> channel_;
stream >> size_; stream >> size_;
/*
stream.readRawData(reinterpret_cast<char*>(&type_), sizeof(type_));
stream.readRawData(reinterpret_cast<char*>(&channel_), sizeof(channel_));
stream.readRawData(reinterpret_cast<char*>(&size_), sizeof(size_));*/
} }
void QAMQP::Frame::Base::readEnd( QDataStream & stream ) void QAMQP::Frame::Base::readEnd( QDataStream & stream )
@ -154,46 +149,56 @@ QVariant QAMQP::Frame::readField( qint8 valueType, QDataStream &s )
QVariant value; QVariant value;
QByteArray tmp; QByteArray tmp;
qint8 nameSize_; qint8 nameSize_;
char octet[1] = {0}, octet2[2] = {0}, octet4[4] = {0}, octet8[8] = {0}; char octet = 0;
switch(valueType) switch(valueType)
{ {
case 't': case 't':
s.readRawData(octet, sizeof(octet)); s.readRawData(&octet, sizeof(octet));
value = QVariant::fromValue<bool>(*octet > 0); value = QVariant::fromValue<bool>(octet > 0);
break; break;
case 'b': case 'b':
s.readRawData(octet, sizeof(octet)); s.readRawData(&octet, sizeof(octet));
value = QVariant::fromValue<int>(*octet); value = QVariant::fromValue<int>(octet);
break; break;
case 'B': case 'B':
s.readRawData(octet, sizeof(octet)); s.readRawData(&octet, sizeof(octet));
value = QVariant::fromValue<uint>(*octet); value = QVariant::fromValue<uint>(octet);
break; break;
case 'U': case 'U':
s.readRawData(octet2, sizeof(octet2)); {
value = QVariant::fromValue<int>(*reinterpret_cast<qint16*>(octet2)); qint16 tmp_value_ = 0;
break; s >> tmp_value_;
value = QVariant::fromValue<int>(tmp_value_);
break;
}
case 'u': case 'u':
s.readRawData(octet2, sizeof(octet2)); {
value = QVariant::fromValue<uint>(*reinterpret_cast<quint16*>(octet2)); quint16 tmp_value_ = 0;
break; s >> tmp_value_;
value = QVariant::fromValue<uint>(tmp_value_);
break;
}
case 'I': case 'I':
s.readRawData(octet4, sizeof(octet4)); {
value = QVariant::fromValue<int>(*reinterpret_cast<qint32*>(octet4)); qint32 tmp_value_ = 0;
break; s >> tmp_value_;
value = QVariant::fromValue<int>(tmp_value_);
break;
}
case 'i': case 'i':
s.readRawData(octet4, sizeof(octet4)); {
value = QVariant::fromValue<uint>(*reinterpret_cast<quint32*>(octet4)); quint32 tmp_value_ = 0;
break; s >> tmp_value_;
value = QVariant::fromValue<uint>(tmp_value_);
break;
}
case 'L': case 'L':
{ {
qlonglong v = 0 ; qlonglong v = 0 ;
s >> v; s >> v;
value = v; value = v;
} }
/*
s.readRawData(octet8, sizeof(octet8));
value = QVariant::fromValue<qlonglong>(*reinterpret_cast<qlonglong*>(octet8));*/
break; break;
case 'l': case 'l':
@ -202,19 +207,22 @@ QVariant QAMQP::Frame::readField( qint8 valueType, QDataStream &s )
s >> v; s >> v;
value = v; value = v;
} }
/*
s.readRawData(octet8, sizeof(octet8));
value = QVariant::fromValue<qulonglong>(*reinterpret_cast<qulonglong*>(octet8));*/
break; break;
case 'f': case 'f':
s.readRawData(octet4, sizeof(octet4)); {
value = QVariant::fromValue<float>(*reinterpret_cast<float*>(octet4)); float tmp_value_;
break; s >> tmp_value_;
value = QVariant::fromValue<float>(tmp_value_);
break;
}
case 'd': case 'd':
s.readRawData(octet8, sizeof(octet8)); {
value = QVariant::fromValue<double>(*reinterpret_cast<double*>(octet8)); double tmp_value_;
break; s >> tmp_value_;
value = QVariant::fromValue<double>(tmp_value_);
break;
}
case 'D': case 'D':
{ {
QAMQP::Frame::decimal v; QAMQP::Frame::decimal v;
@ -253,9 +261,12 @@ QVariant QAMQP::Frame::readField( qint8 valueType, QDataStream &s )
} }
break; break;
case 'T': case 'T':
s.readRawData(octet8, sizeof(octet8)); {
value = QDateTime::fromMSecsSinceEpoch(*reinterpret_cast<qulonglong*>(octet8)); qulonglong tmp_value_;
break; s >> tmp_value_;
value = QDateTime::fromMSecsSinceEpoch(tmp_value_);
break;
}
case 'F': case 'F':
{ {
TableField table_; TableField table_;