Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2015, 07:11   #1
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию Запись всех разрядов uint в файл

В uint храню значение цвета в формате argb (0xAARRGGBB).
Альфа-канал или значение цвета могут быть нулевыми, т.е. примерно так:
Код:
0x00000000
Еще может быть так:
Код:
0x00010101
Проблема: при записи в файл незначащие нули отбрасываются, т.е. вместо
Код:
0x00010101
в файл пишется
Код:
0x10101
Мне же нужно записать uint целиком, с незначащими нулями.

Код:
Код:
std::ofstream binfile;
binfile.open(binFileName.c_str(),std::ios::binary);
unsigned int argb;
unsigned char c = g->bitmap[x,y];
argb = 0x00000000;
argb = argb | c;
argb = argb | (c << 8);
argb = argb | (c << 16);
//binfile.write((char*)&argb,4);
binfile << argb;
binfile.close();
При использовании binfile.write значение оказывается в первых разрядах, а нули в конце.
Пробовал работать через FILE, та же фигня.

Еще раз вопрос: как записать uint целиком? Меня не радует перспектива высчитывать количество нулей "до", чтобы сначала записать их, а потом уже число.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 23.09.2015, 08:20   #2
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Проблему решил сам, но не изящно, сперев принцип из исходников Qt:
Код:
unsigned char *pointer = (unsigned char *)(&argb);
                char tmpBuf[4];
                tmpBuf[3] = *pointer++;
                tmpBuf[2] = *pointer++;
                tmpBuf[1] = *pointer++;
                tmpBuf[0] = *pointer;
                binfile.write((char*)&tmpBuf,4);
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 23.09.2015, 08:44   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

То, что нули в начале, не означает, что int не записался целиком.
В вашем случае вместо нулей из младших битов спереди будут нули из старших битов.

Запишите 0xFF000000 и 0x000000FF и сравните результаты и в старом и в новом коде, а потом почитайте про endianness.
waleri вне форума Ответить с цитированием
Старый 23.09.2015, 08:48   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Откуда узнали, что неправильно записывается?
pu4koff вне форума Ответить с цитированием
Старый 23.09.2015, 09:12   #5
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

pu4koff, mc и просмотр в виде HEX

waleri, я в HEX-виде отлично наблюдал, что вместо 00 1F 1F 1F записано что-то левое. Или как вместо 00 00 00 22 записывается только 22
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)

Последний раз редактировалось Vanta11a; 23.09.2015 в 09:14.
Vanta11a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить запись из всех таблиц romantik1993 Microsoft Office Access 2 03.06.2015 19:29
Создать и заполнить текстовой файл f. Получить файл g, образованный из файла f с исключением всех слов, встречающихся больше одног Newen Паскаль, Turbo Pascal, PascalABC.NET 2 25.04.2012 17:07
Тестовый файл. Найти сумму всех чисел, входящих в этот файл. (Паскаль) Homeros Помощь студентам 1 26.01.2011 14:05
Запись всех строк в одну. Lazio Помощь студентам 1 10.10.2009 21:44
Как преобразовать UINT в строку? Сильванович Михаил Общие вопросы C/C++ 2 12.07.2007 09:58