Название: лень писать, хочу метод переворота байтов в переменной. Отправлено: soulsaver от Январь 17, 2012, 10:24 Есть ли что нить такое в qt? типо хлоп и число int i; которое равно 3 и в шеснадцатиричном виде выглядит так 00 00 00 03, превращается вот в это 03 00 00 00. жизню бы проще на много щас сделало мне. Мечта - функция в качестве аргумента принимает инт, а возвращает его же, но перевернутый ))). Спасибо биг заранее.
Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: Bepec от Январь 17, 2012, 10:32 Лень отвечать, хочу петушка на палочке и стакан холодного сока.
Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: soulsaver от Январь 17, 2012, 10:33 а где-то еще есть питухи на палках? я думал они в сссре остались). ну а если честно, можешь что нить подсказать?
Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: Пантер от Январь 17, 2012, 10:48 qToBigEndian, qToLittleEndian
Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: ecspertiza от Январь 17, 2012, 10:54 а где-то еще есть питухи на палках? я думал они в сссре остались). офф. у нас в супермаркетах "Сота" продаются. сам периодически балуюсь. Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: soulsaver от Январь 17, 2012, 10:58 qToBigEndian, qToLittleEndian есть контакт. легко и просто. класс. спасибо большое, опять выручил меня. Большое человеческое спасибо, теперь мона работать и радоваться)Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: kambala от Январь 17, 2012, 11:34 если ты пишешь данные в QDataStream, то ему просто надо выставить setEndianess(QDataStream::LittleEndian) и все преобразования будут выполняться автоматически
Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: soulsaver от Январь 17, 2012, 11:44 если ты пишешь данные в QDataStream, то ему просто надо выставить setEndianess(QDataStream::LittleEndian) и все преобразования будут выполняться автоматически тоже кул совет). кому нить понадобится, уверен. Но тот мозг который делал структуру dbf3 перевернул все байты в заголовках а имена полей и значения записей нормально вкорячил. и еще некоторые значения там не перевернутые есть, лучше функцией в цикле писать), ну по крайней мере именно в этом случае и именно по моему мнению)). но все равно спасибо, хорошая штука тоже, уверен.Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: Пантер от Январь 17, 2012, 11:55 QDBFRedactor (https://github.com/panter-dsd/QDBFRedactor) - посмотри, может что-то полезное найдешь. Это я когда-то по работе писал.
Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: Akon от Январь 17, 2012, 13:08 std::reverse<>()
Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: soulsaver от Январь 17, 2012, 14:34 QDBFRedactor (https://github.com/panter-dsd/QDBFRedactor) - посмотри, может что-то полезное найдешь. Это я когда-то по работе писал. спасибо )) поглядим). бедняга, тебя полноценный редактор заставили стряпать.. ) мне только выборку и запись по статическому запросу), но все равно общего много. респект тебе.)Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: soulsaver от Январь 17, 2012, 14:37 std::reverse<>() пасип) и это потестим). правда тут лишний заголовочный придется подключать). но если вдруг писать консольную прогу как раз кстати будет.Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: Пантер от Январь 17, 2012, 14:37 спасибо )) поглядим). бедняга, тебя полноценный редактор заставили стряпать.. ) мне только выборку и запись по статическому запросу), но все равно общего много. респект тебе.) Не заставляли - сам сделал. Просто нет нормальных кроссплатформенных свободных редакторов DBF. Жаль, что так и не закончил.Название: Re: лень писать, хочу метод переворота байтов Отправлено: soulsaver от Январь 17, 2012, 14:50 сори что в этой же теме.. но у меня походу мозг уже не пашет, короче перевернутое 32х битное int число считываю побайтно и склеиваю его с помощью оператора смещения(dbfInfo это QByteArray):
Код все пучком пашет. считываю 16ти битное int число (тоже перевертыш): Код получаю какой-то бред, даже не могу понять откуда он это берет.... то что в этих индексах массива байтов лежат именно те байты которые мне нужны я уверен, проверил раз 700.))) уверен что-то глупое является причиной, только не могу этого увидить, сори за растерянность заранее(. Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: soulsaver от Январь 17, 2012, 16:22 ужас)). короче исходные байты 81 00, после переворота показанного выше должно получиться 00 81, но получается FF FF FF 81... причем если я даже записываю в файл байт:
Код: QDataStream<<dbfInfo.at(8); Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: kuzulis от Январь 17, 2012, 17:25 Скорее это
Цитировать или я действительно что-то упускаю, ну оооочень жирное!! ;) Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: kambala от Январь 17, 2012, 17:25 пользуйся беззнаковыми (unsigned) целыми вместо знаковых, например quint16
Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: kuzulis от Январь 17, 2012, 17:26 Дада, это "АЗБУКА" :)
Цитировать пользуйся беззнаковыми (unsigned) целыми вместо знаковых, например quint16 или маскируй свои сдвиги, или плюсуй по очереди, т.е.:вместо: Код
надо: Код
как то так :) Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: Igors от Январь 17, 2012, 18:29 ужас)). короче исходные байты 81 00, после переворота показанного выше должно получиться 00 81, но получается FF FF FF 81... причем если я даже записываю в файл байт: char - signed (знаковый), ну отрицательное int число и получается (в "дополнительном коде"). Для таких склеек хороши inline, напрКод: QDataStream<<dbfInfo.at(8); Код А вообще создается впечатление - делается то что QDataStream сам делает, вероятно не нужное Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: soulsaver от Январь 18, 2012, 09:13 странно, но элемент массива (хоть это и один байт) QDataStream автоматом переводит в 32 битовое представление. Как сами кутековцы говорят. Почему свободное место заполняется FF а не нулями так и не смог вырвать из этих партизанов. Короче они сказали присваивайте необходимый элемент массива переменной типа unsigned char и все будет веником.) На вопрос а если я соединяю несколько байт, не буду ж я их пихать в однобайтную переменную, они опять промолчали. Так я пихал эти самые байты и в int и в char, в обоих случаях появляются загадочные FF. Получается придется читать по байту, пихать в unsigned char а потом их склеивать... не надо на меня так смотреть)))) сам не рад, но другого выхода не вижу. Или может у кого нить есть мысли по этому поводу?)
Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: Пантер от Январь 18, 2012, 09:18 Я тебе ссылку давал (https://github.com/panter-dsd/QDBFRedactor/blob/master/src/core/dbfredactor.cpp). Смотри метод writeHeader.
Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: soulsaver от Январь 18, 2012, 09:32 Я тебе ссылку давал (https://github.com/panter-dsd/QDBFRedactor/blob/master/src/core/dbfredactor.cpp). Смотри метод writeHeader. чет не нахожу такого метода(. хоть и скачал весь проэкт). не сразу заметил что вторая страница форму есть). тут действительно можно inlain использовать). кстати unsigned int тоже пробовал, история таже... FF... причем такая переменная весит 2 байта, а када ее в поток стреам кидаешь записывается 4 байта.)Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: BRE от Январь 18, 2012, 09:36 не надо на меня так смотреть)))) сам не рад, но другого выхода не вижу. Или может у кого нить есть мысли по этому поводу?) Тебе нужно один раз почитать и разобраться с целыми числами. Узнать как они храняться, чем отличаются знаковые от без знаковых, как они расширяются и таких вопросов больше не возникнет.Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: Пантер от Январь 18, 2012, 09:37 Я тебе ссылку давал (https://github.com/panter-dsd/QDBFRedactor/blob/master/src/core/dbfredactor.cpp). Смотри метод writeHeader. чет не нахожу такого методаНазвание: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: soulsaver от Январь 18, 2012, 09:45 Тебе нужно один раз почитать и разобраться с целыми числами. Узнать как они храняться, чем отличаются знаковые от без знаковых, как они расширяются и таких вопросов больше не возникнет. Да я то вроде как помню все, учился давненько конечно. Просто работаю специалистом по тех обслуживанию 9 лет уже, винду ставлю, картриджи меняю, кабельки эзернет обжимаю, никого не трогаю, а тут хлоп и такое задание от начальства, по этому как-то и не могу вклиниться в программирование ), не сердчай на меня ).Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: soulsaver от Январь 18, 2012, 09:48 По ссылке строка 432. [/quote] settings.setValue("Global/History", m_history); вот что выдает (. даже поиском по этому cpp шарю и ниче (. может у меня чего-то нет? ) Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: BRE от Январь 18, 2012, 09:52 Да я то вроде как помню все, учился давненько конечно. Если тебя удивляет появление 0xFF при расширении отрицательного знакового числа, то наверное не все. :)Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: soulsaver от Январь 18, 2012, 11:03 qint16 решил все проблемы ).
Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: Пантер от Январь 18, 2012, 11:05 По ссылке строка 432. [/quote] Код
Название: Re: лень писать, хочу метод переворота байтов в переменной. Отправлено: soulsaver от Январь 18, 2012, 11:32 Да, именно это мне и нужно было))). как на зло я увидел это когда уже разобрался((. Но все равно спасибо большое ).
|