Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
Bretbas
Каждому свое
521 / 207 / 81
Регистрация: 05.08.2013
Сообщений: 1,610
Завершенные тесты: 2
1

Перевод файла в двоичный код

04.07.2014, 00:09. Просмотров 3895. Ответов 19
Метки нет (Все метки)

Привет всем. Возникла проблема: нужно любой файл перевести в двоичный код. Как это сделать средствами C++ или WInAPI?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2014, 00:09
Ответы с готовыми решениями:

перевод десятичного вещественного в машинный код(двоичный код)
пожалуйста , подскажите пожалуйста код C++ ,для перевода вещественного числа в...

Перевод в двоичный код
напишите программу, которая запрашивает у пользователя целое число и выводит...

Перевод числа в двоичный код
Знаю вопрос детский но как перевести число в двоичный код, в 16-й и в 8-й знаю...

Перевод чисел в двоичный код
неподскажите как переводить числа в двоичный код в borland C 3.1 под dos

Перевод double в двоичный код
Здравствуйте! Пожалуйста, скажите в какую сторону смотреть, не пойму как такое...

19
alsav22
5444 / 4839 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
04.07.2014, 00:20 2
Цитата Сообщение от Bretbas Посмотреть сообщение
нужно любой файл перевести в двоичный код.
Любой файл и так двоичный(бинарный).
1
Bretbas
Каждому свое
521 / 207 / 81
Регистрация: 05.08.2013
Сообщений: 1,610
Завершенные тесты: 2
04.07.2014, 00:46  [ТС] 3
как мне получить этот код?и манипулировать с цифрами файла
0
alsav22
5444 / 4839 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
04.07.2014, 01:00 4
Читать, в бинарном режиме, байты (в char).
1
Bretbas
Каждому свое
521 / 207 / 81
Регистрация: 05.08.2013
Сообщений: 1,610
Завершенные тесты: 2
05.07.2014, 00:08  [ТС] 5
не пойму все равно как получить нули и единицы в массиве с помощью CreateFile и ReadFile. Покажите пример
0
alsav22
5444 / 4839 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2014, 00:18 6
При чём здесь нули и единицы, и что за CreateFile и ReadFile?

Добавлено через 2 минуты
Перевод любого файла в бинарный код
0
Retyrn0
45 / 45 / 5
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
05.07.2014, 01:15 7
Где-то так
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
FILE *inp_file=fopen(FileNameInp,"rb");
FILE *out_file=fopen(FileNameOut,"wb");
 
BYTE byte;
char sim;
 
while(!feof(inp_file))
{
  fread(&byte,1,1,file);
 
  if(byte>=128)sim='1';
  else sim='0';
  fwrite(&sim,1,1,out_file);
  byte=byte<<1;
 
  if(byte>=128)sim='1';
  else sim='0';
  fwrite(&sim,1,1,out_file);
  byte=byte<<1;
 
  if(byte>=128)sim='1';
  else sim='0';
  fwrite(&sim,1,1,out_file);
  byte=byte<<1;
 
  if(byte>=128)sim='1';
  else sim='0';
  fwrite(&sim,1,1,out_file);
  byte=byte<<1;
 
  if(byte>=128)sim='1';
  else sim='0';
  fwrite(&sim,1,1,out_file);
  byte=byte<<1;
 
  if(byte>=128)sim='1';
  else sim='0';
  fwrite(&sim,1,1,out_file);
  byte=byte<<1;
 
  if(byte>=128)sim='1';
  else sim='0';
  fwrite(&sim,1,1,out_file);
  byte=byte<<1;
 
  if(byte>=128)sim='1';
  else sim='0';
  fwrite(&sim,1,1,out_file);
  byte=byte<<1;
}
 
fclose(inp_file);
fclose(out_file);
Добавлено через 1 минуту
Обратное преобразование - тоже самое, только наоборот
0
Jupiter
Каратель
Эксперт С++
6570 / 3991 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.07.2014, 16:50 8
Цитата Сообщение от Bretbas Посмотреть сообщение
не пойму все равно как получить нули и единицы
на кой это надо?
0
Bretbas
Каждому свое
521 / 207 / 81
Регистрация: 05.08.2013
Сообщений: 1,610
Завершенные тесты: 2
05.07.2014, 23:40  [ТС] 9
Jupiter, хочу кое че замутить)
0
Jupiter
Каратель
Эксперт С++
6570 / 3991 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.07.2014, 23:44 10
ну так прочил байты и разложи каждый байт на 0 и 1 с помощью битовых операций
0
Bretbas
Каждому свое
521 / 207 / 81
Регистрация: 05.08.2013
Сообщений: 1,610
Завершенные тесты: 2
06.07.2014, 00:43  [ТС] 11
Jupiter, а вообще байт могу получить как число? Я могу его получить в тип DWORD и вывести на экран?
0
Retyrn0
45 / 45 / 5
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
06.07.2014, 01:02 12
Цитата Сообщение от Bretbas Посмотреть сообщение
DWORD
DWORD - это 4 байта. Впихнуть можно, но зачем? Лучше из файла тогда считывать по 4 байта, но тогда в конце может остаться меньше 4 байт, если размер файла не кратен 4.
Цитата Сообщение от Bretbas Посмотреть сообщение
а вообще байт могу получить как число
Не просто можешь. Скорее даже не можешь иначе - любые данные в компе это числа.

Добавлено через 7 минут
char - это тоже число. Только при работе функций, связанных с текстом, комп пользуется соответствием число-символ(UNICODE и т.п.). Главное считывать-записывать файлы в бинарном режиме.

C++
1
2
3
4
char A='a';
char B='b';
 
if(A<B)cout<<"<Буква a меньше, чем буква b"<<endl;
- это нормально. A и B здесь в первую очередь числа, а уже потом символы.
0
alsav22
5444 / 4839 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
06.07.2014, 04:00 13
Кликните здесь для просмотра всего текста
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
string dec_to_bin(int dec)
{
    string bin;
    int b = 0;
    int q = 0;
    
    if (dec != 0)
    {
        while (true)
        {
            q = dec / 2;
            if (q == 0) 
            {
                bin.insert(bin.begin(), '1');
                break;
            }
            b = dec % 2;
            if (b == 0) 
                bin.insert(bin.begin(), '0');
            if (b == 1) 
                bin.insert(bin.begin(), '1');
            dec = q;
        }
    }
    else bin.insert(bin.begin(), '0');
    
    // выравнивание по байту
    unsigned int number_bit = bin.size();
    unsigned int c = (number_bit % 8); 
    if (c != 0)
        for (unsigned int i = 0; i < 8 - c; i++)
            bin.insert(bin.begin(),'0');
    
    return bin;
}
 
int main()
{
    const char* FileNameIn  = "1.txt";
    const char* FileNameOut = "2.txt";
    
    ifstream in(FileNameIn, ios::binary);
    if (!in)
        cout << "Error!" << endl;
    else
    {
        ofstream out(FileNameOut);
 
        unsigned char byte;
        while(in.read((char*)&byte, 1)) // читаем байты из файла
            out << dec_to_bin(byte); // записываем двоичное представление байтов
          
        in.close();
        out.close();
    }
        
    system("pause");
    return 0;
}
0
Bretbas
Каждому свое
521 / 207 / 81
Регистрация: 05.08.2013
Сообщений: 1,610
Завершенные тесты: 2
06.07.2014, 23:03  [ТС] 14
Retyrn0, то есть мне байты нужно считывать как тип char ,а как потом посмотреть число по этому считаннному байту char?
0
Retyrn0
45 / 45 / 5
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
06.07.2014, 23:43 15
Цитата Сообщение от Bretbas Посмотреть сообщение
то есть мне байты нужно считывать как тип char
Посмотреть==вывести на экран? Я так понял нужно преобразовать в последовательность символов 1 и 2 - тогда просто работай с char-ом, как с обычным числом.

Добавлено через 7 минут
Если выводить на экран, нужно указать функции, чтобы она работала с числом, а не символом. Вот пример: программа выводит на экран значение одной и той же переменной, но в одном случае, как число, а во втором - как символ...

C++
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main()
{
    for(unsigned int c=0;c<256;c++)
    {
        printf("%d  -   %c\n",c,(char)c);
    }
 
    return 0;
}
Добавлено через 4 минуты
Разобрался?
0
Bretbas
Каждому свое
521 / 207 / 81
Регистрация: 05.08.2013
Сообщений: 1,610
Завершенные тесты: 2
08.07.2014, 00:04  [ТС] 16
Еще не пробовал.
А так,чтобы сразу прояснить что я хочу сделать : хочу попробовать реализовать архиватор. Придумал алгоритм как 4 вещественных числа заархивировать и на выходе получить 3. Поэтому,хочу файл преобразовать в последовательность чисел и попробовать заархивировать их по моему алгоритму
0
Retyrn0
45 / 45 / 5
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
08.07.2014, 20:01 17
Цитата Сообщение от Bretbas Посмотреть сообщение
хочу файл преобразовать в последовательность чисел
Ну я же сказал, что это и так последовательность чисел. Перевод в символы только займёт время. Как я и думал, тебе не нужны символы. Если хочешь смотреть последовательность бит в файле, то лучше написать прогу, типа блокнота, в бинарном режиме(хотя они уже вроде есть). Для архиваторов нужно использовать битовые операции.

Вот тебе пример вывода значений бит файла, упор на биты:

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
unsigned char bayt;
 
FILE*file=fopen("file_name","rb");
 
while(!feof(file))
{
    fread(&bayt,1,1,file);//считываем очередной байт из файла
 
    if((bayt>>7)==1)//Выводим первый бит
        printf("1");
    else
         printf("0");
 
 
    if(((bayt>>6)&1)==1)//Выводим второй бит
        printf("1");
    else
         printf("0");
 
    if(((bayt>>5)&1)==1)//Выводим третий бит
        printf("1");
    else
         printf("0");
 
    if(((bayt>>4)&1)==1)//Выводим четвёртый бит
        printf("1");
    else
         printf("0");
 
    if(((bayt>>3)&1)==1)//Выводим пятый бит
        printf("1");
    else
         printf("0");
 
    if(((bayt>>2)&1)==1)//Выводим шестой бит
        printf("1");
    else
         printf("0");
 
    if(((bayt>>1)&1)==1)//Выводим седьмой бит
        printf("1");
    else
         printf("0");
 
    if((bayt&1)==1)//Выводим восьмой бит
        printf("1");
    else
         printf("0");
 
    printf("\n");//все 8 бит очередного байта вывели, переходим на новую строку
}
Всё довольно лаконично. А вот преобразовывать в символы...это страшно
1
Bretbas
Каждому свое
521 / 207 / 81
Регистрация: 05.08.2013
Сообщений: 1,610
Завершенные тесты: 2
08.07.2014, 22:52  [ТС] 18
да не нужны мне символы уже) мне нужны тупо биты, которые я буду архивировать по своему алгоритму
0
Retyrn0
45 / 45 / 5
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
08.07.2014, 23:13 19
Цитата Сообщение от Bretbas Посмотреть сообщение
нужны тупо биты
Выше написал ппример как побитово работать.
0
Bretbas
Каждому свое
521 / 207 / 81
Регистрация: 05.08.2013
Сообщений: 1,610
Завершенные тесты: 2
09.07.2014, 00:14  [ТС] 20
лан попробую. Выложу здесь если что
0
09.07.2014, 00:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2014, 00:14

Перевод любого слова в двоичный код
Требуется создать программу, которая будет переводить любое слова, написанное...

Перевод едениц и нулей из блокнота в двоичный код
Доброго времени суток , столкнулся с некоторой проблемой: Имеется .txt файл с...

Перевод массива десятичных чисел в двоичный код
Есть такого вида код: #include &lt;iostream&gt; using namespace std; int i,j;...


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

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

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