Russian Qt Forum

Qt => Общие вопросы => Тема начата: soulsaver от Января 17, 2012, 08:47



Название: QDataStream<<шестнадцатиричное значение.
Отправлено: soulsaver от Января 17, 2012, 08:47
Здравствуйте уважаемые программисты. Мне нужна помощь и я очень надеюсь ее тут получить))). От гугла уже тошнит, на яндекс вопросах тоже не помогли). Дело собственно вот в чем. Делаю программу которая на низком уровне (без драйверов) выдирает нужную инфу из 2х дбфок, создает новую и записывает все туда. Структуру дбф3, а мне нужен именно этот тип, вызубрил на зубок. В принципе ничего сложного нет. но вот в чем проблема. Немогу конвертировать переменную int в 16тиричную систему исчисления а потом побитно записать в файл потоком QDataStream. Вот примеры:
Код:
QFile dbf1;
QMessageBox *msgBox=new QMessageBox(this);
dbf1.setFileName("d:\\dbf\\izdev.DBF");
if (!dbf1.open(QIODevice::WriteOnly)){
    msgBox->setText("File open error!!!!");
    msgBox->show();
}
QDataStream newDbf(&dbf1);
QString conv;
unsigned char dbfVersion= 0x03;
unsigned char dbfDay;
unsigned char dbfMonth;
unsigned char dbfYear;
unsigned short int dbfKolZap;
dbfKolZap=3;
dbfDay= dbfInfo.at(3);
dbfMonth = dbfInfo.at(2);
dbfYear = dbfInfo.at(1);
newDbf<<dbfVersion;
newDbf<<dbfYear;
newDbf<<dbfMonth;
newDbf<<dbfDay;
newDbf<<conv.setNum(dbfKolZap,16);
ну это естественно тока процедура записи в файл, переменные которые я считал с прошлого дбф dbfYear, dbfMonth, dbfDay записываются хорошо, именно так как надо. Для пробы присвоил dbfVersion значение вручную 0x03 и она тоже хорошо записалась. а вот newDbf<<conv.setNum(dbfKolZap,16); пишется во первых криво(записывает не в 16тиричной системе а в ASCII(не 03 а 33 пишет) причем еще куча нулевых байт, ну нулевые понятно, qString большая переменная и она записывается полностью не отбрасывая порожняк, + даже еще что-то свое вставляет. Было еще куча жалких попыток это сделать... Помогите плииз, люди добрые, а то уже скоро работу сдавать а я в тупике и не знаю уже что делать, без вас не справлюсь. Жду с нетерпением.


Название: Re: QDataStream<<шестнадцатиричное значение.
Отправлено: Пантер от Января 17, 2012, 09:10
А зачем ты через QString работаешь? Просто засовывай в поток свой dbfKolZap.


Название: Re: QDataStream<<шестнадцатиричное значение.
Отправлено: soulsaver от Января 17, 2012, 09:18
ээээммм.... прикинь я и так и этак его вертел чтоб в 16тиричную перевести.... а тут плять....  и не разу ж мой мозг не кинул в поток просто десятиричное число.... пойду возьму ствол и застрелюсь.... РАБОТАЕТ. РЕШЕНО!!! Стыдно то как....


Название: Re: QDataStream<<шестнадцатиричное значение.
Отправлено: Пантер от Января 17, 2012, 09:20
Забей, бывает. У самого как-то такое было.