Всем привет!!!
Возникла следующая задача, связанная с преобразованием данных. Итак, есть переменная в формате "qint32", в которую записывается значение принятое от некоторой железяки, в самой железяке этот параметр находится в формате IEEE 754. Далее, значение преобразуется в строку. Соственно код с комментариями.
//Обьявление переменных.
qint32 ReadRealValue;
QString HexFloat;
Функция связи с "вундер-ваффен", и запись в переменную "ReadRealValue", работает отлично, проблем нет.
//Преобразование.
ReadRealValue = qToBigEndian<qint32>(ReadRealValue); //Замена порядка байтов.
HexFloat.setNum(ReadRealValue, 16); //Преобразование в строку.
Здесь все отлично, Qt - дебагер показывает строку "43F14000", которая полностью соответствует содержимому в памяти железяки. Далее, есть функция которая преобразует данные из QByteArray в строку содержащую число в формате IEEE 754. Я не являюсь ее автором, я нашел ее в интернете, и немного переделал под свои цели. Если кому интересно, вот функция:
//Convert Byte array to IEEE 754 Floating point data.
QByteArray.FloatArray = QByteArray::number(FloatArray.toLongLong(&ok,16),2);
if(FloatArray.length()==32) {
if(FloatArray.at(0)=='1') sign =-1;
FloatArray.remove(0,1);
}
QByteArray fraction = FloatArray.right(23);
for(int i=0; i<fraction.length(); i++)
if(fraction.at(i)=='1') mantissa += 1.0/(pow(2,i+1));
int exponent = FloatArray.left(FloatArray.length()-23).toLongLong(&ok,2)-127;
OutFloat = QString::number(sign*pow(2,exponent)*(mantissa+1.0),'f', 2 );
Данную функцию я тестировал, работает нормально. Т.е если я обьявляю, к примеру:
QByteArray FloatArray("43F14000");
То в QLabel она выдает 482,5 что соответствует действительности. Это было отступление от темы.
Теперь мне нужно преобразовать строку HexFloat в QByteArray, для этого я использую следующую функцию:
QByteArray.FloatArray = QByteArray::fromHex(HexFloat.toLocal8Bit().constData());
И результат нулевой, при этом проект компилируется без ошибок и предупреждений. И у меня возникает вопрос.
Скажите пожалуйста, возможно я упустил какие либо дополнительные параметры при конвертировании?
Или возможны какие либо другие способы преобразования QString в QByteArray?