С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
#1

Вывести в двоичном виде нули и единицы 01010110001 - C++

19.09.2012, 11:31. Просмотров 1487. Ответов 16
Метки нет (Все метки)

Не понимаю почему не выводится буфер в двоичном виде, да и флаг tellg() равен -1 в конце программы.. Помогите пожалуйста.
Цель, посмотреть расстановку нулей и единиц по битам, в программе открываю бинарный файл, читаю 1 байт, и хочу увидеть чему равны значения битов.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<iostream>
#include<fstream>
using namespace std;
 
int main()
{
    ifstream file;
    file.open("hlr20", ios::binary);
    clog << "File \"hlr20\" opened\n";
 
    clog << "Position is READ is: " << file.tellg() << endl;
    file.seekg(23);
    clog << "Position of READ moved to 23: " << file.tellg() << endl;
 
    char* buffer;
    buffer = new char [1];
    file.read(reinterpret_cast<char*>(buffer), 1);
 
    clog << "Buffer is: " << ios::binary << buffer << endl;
    clog << "Position of READ is: " << file.tellg() << endl;
 
    system("pause");
    return 0;
}
0
Миниатюры
Вывести в двоичном виде нули и единицы 01010110001  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2012, 11:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывести в двоичном виде нули и единицы 01010110001 (C++):

Вывести старший и младший байт заданного целого положительного числа в шестнадцатиричном и двоичном виде - C++
Дано целое положительное число , тип int. Вывести старший и младший байт в 16ом и в 2ом виде.

Распознать нули и единицы - C++
Помогите написать задачку, очень надо)) 00010001110 это условие 00010001010 00010001010 00010001110 и вот, что должно...

Поставить в начало последовательности нули, а затем единицы. - C++
Последовательность а1, а2,..., аn, состоит из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы.

Поставить в начало последовательности нули, а затем единицы - C++
1 Последовательность a1; a2; ...; an состоит из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы.

Сформировать массив В, элементами которого являются нули и единицы - C++
В файле F матрица действительных чисел размером 3 * 6. Сформировать массив В, элементами которого являются нули и единицы. b = 1 Если все...

Массивы: поставить в начало последовательности нули, а затем единицы - C++
(Массив)Последовательность a1, a2, …an состоит из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы. ...

16
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.09.2012, 11:40 #2
Цитата Сообщение от daite_dve Посмотреть сообщение
C++
1
2
3
char* buffer;
buffer = new char [1];
file.read(reinterpret_cast<char*>(buffer), 1);
C++
1
2
char buffer = 0;
file.read(&buffer, 1);
Добавлено через 1 минуту
Цитата Сообщение от daite_dve Посмотреть сообщение
C++
1
clog << "Buffer is: " << ios::binary << buffer << endl;
это бред! стандартных средств вывода в поток в двоичном виде нет, нужно вручную переводить
1
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
19.09.2012, 11:44  [ТС] #3
Отлично, после изменений прога выдала:

Buffer is: 32
Position of READ is: -1

-1 меня настораживает... Ведь я файл то не закрывал, tellg() должно по идее быть равно 24 (сдвинулись на 1 байт).
32, т.е. 0010 0000 переводить, да?
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.09.2012, 11:45 #4
Цитата Сообщение от daite_dve Посмотреть сообщение
да и флаг tellg() равен -1
Курсор в конце файла.
0
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
19.09.2012, 11:48  [ТС] #5
Дело в том, что бинарник весит 600 метров...

Когда я из
C++
1
clog << "Buffer is: " << ios::binary << buffer << endl;
убрал ios::binary, программа показала пустой буффер.. Все таки получается ios::binary тут нужно?
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.09.2012, 11:51 #6
Цитата Сообщение от daite_dve Посмотреть сообщение
Ведь я файл то не закрывал, tellg() должно по идее быть равно 24
Смотря сколько байт в файле.

Добавлено через 2 минуты
С моим файлом у меня ваш код правильно выдаёт позицию. Попробуйте код с другим файлом.
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.09.2012, 11:57 #7
Цитата Сообщение от daite_dve Посмотреть сообщение
Все таки получается ios::binary
ios::binary - это константа - число т.е. вы выводите значение этой константы! не путайте с аналогичным манипулятором std::hex - это функция
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.09.2012, 12:19 #8
Цитата Сообщение от daite_dve Посмотреть сообщение
убрал ios::binary, программа показала пустой буффер.. Все таки получается ios::binary тут нужно?
Не нужно. Если пустой, то смотрите, что у вас представляет считанный байт, и как его обрабатывает clog <<. Так попробуйте:
C++
1
clog << "Buffer is: " << (int)buffer << endl;
Файл из себя, что представляет?
0
KostyaKulakov
Заблокирован
19.09.2012, 12:22 #9
C++
1
2
3
4
5
6
7
8
9
10
11
void printAsBinary(unsigned int x)
{
    for (int i = sizeof(unsigned int)*8 - 1; i >= 0; i--)
    {
        unsigned int mask = (1 << i);
        if (x & mask)
            cout << '1';
        else
            cout << '0';
    }
}
1
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
19.09.2012, 12:29  [ТС] #10
Файл представляет из себя бинарник весом 600 метров, вот первая строка файла в шеснадцатиричном ASCII (открываю UltraEdit-ом):

31 56 43 48 32 30 4D 53 4B 2F 5A 36 30 31 32 30

Что соответствует:

1VCH20MSK/Z60120

Сейчас буду пытаться вывести первый символ, т.е. "1"

Добавлено через 35 секунд
Ах да, если это важно, файл без расширения.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.09.2012, 12:33 #11
Цитата Сообщение от daite_dve Посмотреть сообщение
Ах да, если это важно, файл без расширения.
Откуда файл? Что за бинарник? Была у меня тут одна тема насчёт -1, поэтому спрашиваю.
0
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
19.09.2012, 13:03  [ТС] #12
Без проблем! Даю бинарник. Правда не 600 МБ а первую строчку, для понимания концепции достаточно. Просто удаляем расширение .txt и получаем фалик, с которым я работаю. Ну и задачу грубо говоря можно так поставить. Прочитать первый байт, и вывести его в hex, или в binary, затем второй, и т.д.
0
Вложения
Тип файла: txt data.txt (16 байт, 5 просмотров)
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.09.2012, 13:10 #13
Если можно, то 30 байт. Если разбираться с -1, после считывания позиции 23. И ещё. Файл, который выложили, каким способом из бинарника делали?
0
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
19.09.2012, 13:17  [ТС] #14
Есть такой текстовый редактор, слышали наверное, UltraEdit, я открыл им 600 МБ файл, в нем он мне автоматом преобразовал первую строку в "1VCH20MSK/Z60120". Я просто создал текстовый файл, записал в него этот текст, и удалил разрешение. Теперь при открытии в UltraEdit шеснадцатиричные представления 600 мегового и созданного текстового файла полностью совпадают, текстовые эквиваленты тоже, соответственно.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.09.2012, 13:25 #15
-1, ваш редактор, как изобразит?

Добавлено через 3 минуты
Мысли есть по поводу -1, после считывания 23 позиции?
0
19.09.2012, 13:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2012, 13:25
Привет! Вот еще темы с ответами:

Заменить в тексте все нули единицами, а единицы нулями - C++
Заменить в тексте все нули единицами, а единицы нулями, начиная с позиции, в которой количество предшествующих. У меня есть начало...

Расположить элементы массива так, чтобы нули было в начале, а единицы в конце - C++
Дан массив, состоящий из нулей и единиц, нужно расположить элементы массива так, чтобы нули было в начале, а единицы в конце.

Дано целое число N и набор из N целых чисел, содержащий только нули и единицы. - C++
Дано целое число N и набор из N целых чисел, содержащий только нули и единицы. Найти номер элемента, с которого начинается самая длинная...

Поставьте в начало этой последовательности нули, а затем единицы. Подсчитайте количество нулей и единиц - C++
Создайте одномерный массив, представляющий собой последовательность из нулей и единиц (через функции формирования случайного числа)....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.