Форум программистов, компьютерный форум CyberForum.ru

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

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

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

19.09.2012, 11:31. Просмотров 1410. Ответов 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;
}
Миниатюры
Вывести в двоичном виде нули и единицы 01010110001  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2012, 11:31     Вывести в двоичном виде нули и единицы 01010110001
Посмотрите здесь:
C++ Вывести старший и младший байт заданного целого положительного числа в шестнадцатиричном и двоичном виде
C++ Распознать нули и единицы
C++ Поставить в начало последовательности нули, а затем единицы
Поставить в начало последовательности нули, а затем единицы. C++
C++ Массивы: поставить в начало последовательности нули, а затем единицы
Заменить в тексте все нули единицами, а единицы нулями C++
Сформировать массив В, элементами которого являются нули и единицы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.09.2012, 11:40     Вывести в двоичном виде нули и единицы 01010110001 #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;
это бред! стандартных средств вывода в поток в двоичном виде нет, нужно вручную переводить
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
19.09.2012, 11:44  [ТС]     Вывести в двоичном виде нули и единицы 01010110001 #3
Отлично, после изменений прога выдала:

Buffer is: 32
Position of READ is: -1

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

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

Добавлено через 2 минуты
С моим файлом у меня ваш код правильно выдаёт позицию. Попробуйте код с другим файлом.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.09.2012, 11:57     Вывести в двоичном виде нули и единицы 01010110001 #7
Цитата Сообщение от daite_dve Посмотреть сообщение
Все таки получается ios::binary
ios::binary - это константа - число т.е. вы выводите значение этой константы! не путайте с аналогичным манипулятором std::hex - это функция
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.09.2012, 12:19     Вывести в двоичном виде нули и единицы 01010110001 #8
Цитата Сообщение от daite_dve Посмотреть сообщение
убрал ios::binary, программа показала пустой буффер.. Все таки получается ios::binary тут нужно?
Не нужно. Если пустой, то смотрите, что у вас представляет считанный байт, и как его обрабатывает clog <<. Так попробуйте:
C++
1
clog << "Buffer is: " << (int)buffer << endl;
Файл из себя, что представляет?
KostyaKulakov
Заблокирован
19.09.2012, 12:22     Вывести в двоичном виде нули и единицы 01010110001 #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';
    }
}
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
19.09.2012, 12:29  [ТС]     Вывести в двоичном виде нули и единицы 01010110001 #10
Файл представляет из себя бинарник весом 600 метров, вот первая строка файла в шеснадцатиричном ASCII (открываю UltraEdit-ом):

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

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

1VCH20MSK/Z60120

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

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

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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.09.2012, 13:25     Вывести в двоичном виде нули и единицы 01010110001 #15
-1, ваш редактор, как изобразит?

Добавлено через 3 минуты
Мысли есть по поводу -1, после считывания 23 позиции?
Yandex
Объявления
19.09.2012, 13:25     Вывести в двоичном виде нули и единицы 01010110001
Ответ Создать тему
Опции темы

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