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

Вывести содержимое файла в двоичном коде - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
Sheid
Сообщений: n/a
15.09.2010, 21:28     Вывести содержимое файла в двоичном коде #1
Здраствуйте, не могли бы вы помочь с программой?
она должна просто показывать битовое представление чисел, записанных в data.dat, но этого не делает(

Вот текст:
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
25
26
27
28
29
#include <stdio.h>
#include <stdlib.h>
 
int main (int argc, const char **argv)
{
char c;
int x0 = 0; int x1 = 0x7fffffff;
int i; int j;
int bit;
FILE *f;
 
f = fopen ("data.dat", "rb");
 
for (i=0; i <= x1 && fread (&c, 1, 1, f); ++i)
 {
  if (i >= x0)
   {
   for (j=8; j>0; --j)
    {
    printf ("%d bit", j);
    bit = (c&(1<<j)?1:0);
    printf ("%d \n", bit);
    }
    printf ("\n");
   }
 }
 fclose (f);
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
16.09.2010, 17:17     Вывести содержимое файла в двоичном коде #2
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 <stdlib.h>
#include <stdio.h>
 
int main()
{
    FILE *pfile = NULL;
    unsigned int val = 0;
    int i = 0;
    
    if((pfile = fopen("file.dat", "rb")) == NULL) {
        fprintf(stderr, "can't open file\n");
        return EXIT_FAILURE;
    }
    
    while(fscanf(pfile, "%d", &val) == 1) {
        for(i = sizeof(val) * 8 - 1; i >= 0; --i)
            printf("%d", ((val >> i) & 1));
            
        printf("\n");
    }
    
    fclose(pfile);
    return EXIT_SUCCESS;
}
Изображения
 
Sheid
Сообщений: n/a
16.09.2010, 17:35     Вывести содержимое файла в двоичном коде #3
А в чем конкретно ошибка была, сказать не можете? Просто на будущее...
А так: "Большое спасибо!"
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
16.09.2010, 17:43     Вывести содержимое файла в двоичном коде #4
Цитата Сообщение от Sheid Посмотреть сообщение
А в чем конкретно ошибка была, сказать не можете? Просто на будущее...
Я признаться Ваш код не смотрел, когда писал свой. Но сейчас посмотрим...
1) Мне непонятно бесполезное условие в цикле с очень большим числом 0x7fffffff, выглядит надо сказать бредово.
2) Вы читаете числа функцией fread(), это функция производит неформатированное чтение, то есть тупо читает байты. Попробуйте записать число в файл с помощью fwrite и посмотрите, что в нем окажется Если в файле лежат числа в привычной для человека форме (арабская запись) такое чтение не подходит. Форматное чтение обеспечивается с помощью функции fscanf.

Так в принципе все, остальное вполне могло бы работать. Хотя как видите я предпочел считывать числа в переменную типа unsigned int, а не с char.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
16.09.2010, 17:59     Вывести содержимое файла в двоичном коде #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <fstream>
#include <iostream>
#include <iterator>
#include <iomanip>
#include <algorithm>
 
using namespace std;
 
int main(){
    ifstream f( "1.cpp", ios_base::binary );
    if( !f ){
        cout << "cant open file!\n";
        return -1;
    }
    cout << setbase( 2 );
    for_each( istreambuf_iterator<char>( f ), istreambuf_iterator<char>(), [=](char c){
        cout << (unsigned)c;
    } );
}
правда по стандарту в setbase нельзя 2ку совать)) но в gcc канает
Yandex
Объявления
16.09.2010, 17:59     Вывести содержимое файла в двоичном коде
Ответ Создать тему
Опции темы

Текущее время: 12:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru