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

Как побайтно считать информацию из исполняемого файла - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ почему выдает ошибку: ctrcmp? http://www.cyberforum.ru/cpp-beginners/thread703794.html
# include<iostream> # include<conio.h> # include<string> # include<stdio.h> #include <stdlib.h> using namespace std; struct mas { char name;
C++ Как нарисовать окружность Подскажите, пожалуйста, как нарисовать окружность в Microsoft Visual C++ .:thank_you: http://www.cyberforum.ru/cpp-beginners/thread703785.html
конкатенация char C++
Привет!!! Пытаюсь разобраться с указателями char ничего не получается. вот код: #include <iostream> using std::cout; using std::endl; #include <cstring> //prototip dl9 strcmp i strncmp using std::strcat;//konkatenasi9 strok
Двомерные масивы C++
Помогите что не так case 3:{long double b; int z; cout<<"Введите елементы масива"<<endl; for(int i=0;i<m;i++) for(int j=0;j<n;j++) {cin>>b; }
C++ ошибка при создании rc.exe http://www.cyberforum.ru/cpp-beginners/thread703764.html
#include <stdio.h> #include <stdlib.h> #include <time.h> void genKeyFile(char *fileName) { srand(time(0)); char key = rand()%254+1; FILE *fkey = fopen(fileName, "w"); fputc(key,fkey);
C++ Объясните пожалуйста, как конкретно работает код Программа считывает из файла фамилии, имена, годы рождения и балы студентов, и записывает в другой файл фамилии, начинающейся с букв А и Б и имеющие рейтинг больше 90. Я пишу как понимаю в комментаририях, прошу объяснить каждую строку, что не закоментировал или исправить, что понял не так. Очень хочу разобраться. #include "stdafx.h" // библиотека visual studio #include <fstream> //... подробнее

Показать сообщение отдельно
bychevoz
1 / 1 / 0
Регистрация: 16.11.2012
Сообщений: 27
21.11.2012, 06:02  [ТС]     Как побайтно считать информацию из исполняемого файла
да все верно, пока я ждал ответа, я написал более аккуратный работающий и оптимизированный код (оптимизировал функцию ToBin)

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
65
66
67
68
69
70
#include <fstream>
#include <iostream>
#include <exception>
#include <string>
using namespace std;
 
bool           FileCreate(ifstream& in);
unsigned char  getbyte   (int pos, ifstream& in); 
string         ToBin     (unsigned char byte); 
 
void main()
{
    ifstream in;
    FileCreate(in);
    long long size=in.tellg();
    in.seekg(0);
    long long bytes[256]={0};
    for (int i=0; i<=size*8-8; i++)
        bytes[getbyte(i, in)]++;
    cout<<endl<<endl;
    unsigned char max=0;
    for (int i=0; i<256; i++)
        if (bytes[i]!=0)
        {
            if (bytes[i]>bytes[max]) max=i;
            cout<<"Byte "<<ToBin(i)<<" met "<<bytes[i]<<" times in this file\n";
        }
    cout<<"\nThe most often byte is "<<ToBin(max)<<" - "<<bytes[max]<<" times";
    cin.get();
}
 
bool FileCreate(ifstream& in)
{
    cout<<"Enter input filename: ";
    string iname;
    getline(cin,iname);
    try
    {
        in.open(iname,ios::in|ios::binary|ios::ate);
        if (!in) throw exception("Cannot open input file");
    }
    catch(exception& ex)
    {
        in.close();
        cout<<ex.what();
        cin.get();
        system("cls");
        return FileCreate(in);
    }
    return true;
}
 
string ToBin(unsigned char byte)
{
    string ret;
    for (int i=0; i<8; i++) 
        ret+=(byte<<i)&128?'1':'0';
    return ret;
}   
 
unsigned char getbyte(int pos, ifstream& in)
{
    in.seekg(pos/8);                     
    char c;
    in.get(c);                           
    if (pos%8==0) return c;              
    char c1;                
    in.get(c1);                          
    return (c<<(pos%8))+(c1>>(8-(pos%8))); 
}
 
Текущее время: 14:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru