Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 13.01.2017
Сообщений: 3
1

HEX viewer: создать программу для чтения из файла текста в обычном режиме и в шестнадцатеричном

14.01.2017, 20:15. Показов 1650. Ответов 6
Метки нет (Все метки)

нужно создать программу для чтения из файла текста и выписывания его в обычном режиме и в шестнадцатеричном. кроме того нужно сделать Pg Up и Pg Dn, используя только стандартные библиотеки. подскажите как переместить указатель на 16 байтов назад, например по прочтению и выписыванию первых 32 байтов файла

Добавлено через 21 час 25 минут
частично написал программу, но не могу найти как вывести в шестнадцатеричном виде то что я скопировал с файла в char переменную (буфер). прошу помощи!
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2017, 20:15
Ответы с готовыми решениями:

Проверка правильности записи целых чисел (в обычном, шестнадцатеричном, экспоненциальном видах)
Имеется текст на языке Pascal. Разработать программное средство, которое будет проверять...

Как создать диалог выбора файла для чтения и сохранения файла?
Добрый день! Написал простейший текстовый редактор для Windows. Все работает, текст читает из...

Открытие файла в режиме HEX
Здравствуйте, подскажите пожалуйста способы открытия файла, так чтоб записать допустим в...

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

6
Диссидент
Эксперт C
26355 / 16361 / 3558
Регистрация: 24.12.2010
Сообщений: 36,244
14.01.2017, 20:37 2
Цитата Сообщение от popilsjawa Посмотреть сообщение
частично написал программу,
Покажи свой код. Тогда может быть и помогу. Перечитай правила. Обрати внимание на п.4.7
0
0 / 0 / 0
Регистрация: 13.01.2017
Сообщений: 3
14.01.2017, 21:13  [ТС] 3
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
//--------------------funkcja TEKSTOWO-----------------------------------
void tekstowo(fstream &hex_text)
{
    long pozycja;
    int cykl=1;
 
    char bufor[buf_pojemn]; // bufer do wczytania tekstu
    hex_text.seekg(0, ios::end); // wstawienie wskaznika pobierania na koniec pliku
    pozycja=hex_text.tellg(); // odzytanie pozycji wskaznika pobierania
    hex_text.seekg(0); // wstawienie wskaznika pobierania na poczatek pliku
    while(cykl==1 || cykl==2)
    {
        //system("CLS");
        cout<<"|| dalej - <S> ||   || wstecz - <W> ||   || zakoncz przeglad TEKSTOWO - <0> ||"<<endl;
        if(cykl==1)
        {
            wczyt_tekstu(hex_text, pozycja, bufor);
        }
        if(cykl==2)
        {
            wstecz(hex_text, pozycja);
            wczyt_tekstu(hex_text, pozycja, bufor);
        }
        cout<<bufor<<endl;
        printf( "%02X ", bufor[ 3 ] ); 
                cout <<  hex <<bufor[ 3 ]<< endl; 
        cykl=przewijanie();
        cout<<"pozycja"<<hex_text.tellg()<<endl;
        cout<<"roznica"<<pozycja-hex_text.tellg()<<endl;
        system("PAUSE");
    }   
}
Добавлено через 6 минут
я читаю с файла текст по 16 байтов, и должен с буфера вывести его в шестнадцатеричном виде... но cout не справляется, а желательного именно через него
0
Диссидент
Эксперт C
26355 / 16361 / 3558
Регистрация: 24.12.2010
Сообщений: 36,244
14.01.2017, 21:38 4
popilsjawa, ничего в коде не понял На всякий случай, 1 байт переводится в 16-ричный вид так.
C++
1
2
3
4
5
6
unsigned char b;
char c1 = b >> 4;
c1 = (c1 <10) ? '0' + c1 : 'A' + c1 - 10;
char c1 = b &15;
c2 = (c2 <10) ? '0' + c2 : 'A' + c2 - 10;
cout << c1 << c2;
1
0 / 0 / 0
Регистрация: 13.01.2017
Сообщений: 3
14.01.2017, 23:08  [ТС] 5
извините, не могу привести полный код, чтобы он не светился, потому что антиплагиат. но я уже нашел как это сделать... cout<<hex<<(int)bufor[1]<<endl; не знал что там надо написать (int) перед элементом массива... теперь надо вывести адрес первого элемента этого массива... это должна быть первая колонка HEX viewer, где адрес должен иметь вид 00000000, потом 00000010, ...., 000000А0, ....... и так далее
0
Диссидент
Эксперт C
26355 / 16361 / 3558
Регистрация: 24.12.2010
Сообщений: 36,244
14.01.2017, 23:28 6
Цитата Сообщение от popilsjawa Посмотреть сообщение
не могу привести полный код
И слава Богу! И в этом-то куске черт ногу сломит. И, главное, совершенно непонятно, где проблемное место.
Цитата Сообщение от popilsjawa Посмотреть сообщение
теперь надо
Все, что вам в самом деле надо, приведено в посте 4. Ваше дело - искать ли средства решения "высокого уровня", или воспользоваться приведенным простейшим кодом. А если вы затрудняетесь с переводом числа в группу байт...
C++
1
2
3
4
5
void Perevod(int n, unsigned char *bb)
{
  for(int i; i < sizeof(int); i++)
     bb[i] = (n >> 8*(sizeof(int) - 1))&255;
}
Вместо int можно использовать почти любой тип данных (long, void *, double... )
0
3171 / 1930 / 313
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
15.01.2017, 00:08 7
Цитата Сообщение от popilsjawa Посмотреть сообщение
но cout не справляется

Не по теме:

На фига козе баян?


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
void HexDumpQLine(BYTE* pBuf,DWORD dwSize,DWORD dwStart,FILE* pOut)
{
   const int   BLOCK_SIZE = 0x10;     // One Line
   
   DWORD    dwOfs = dwStart - (dwStart % 16);
   
   if (IsBadReadPtr(pBuf + dwOfs,BLOCK_SIZE * 5))
   {
      return;
   }
   
   while (dwOfs < (dwStart + BLOCK_SIZE * 4))
   {
      fprintf(pOut,"%08X: ",dwOfs);
      
      int   ii = 0;
      
      for (ii = 0; ii < BLOCK_SIZE; ++ii)
      {
         if ((dwOfs + ii) < dwSize)
         {
            fprintf(pOut," %02X",pBuf[dwOfs + ii]);
         }
         else
         {
            fprintf(pOut,"   ");
         }
      }
      
      fprintf(pOut,"  ");
      
      for (ii = 0; ii < BLOCK_SIZE; ++ii)
      {
         BYTE     byChr = pBuf[dwOfs + ii];
         
         if ((dwOfs + ii) < dwSize)
         {
            fprintf(pOut,"%c",IsPrintable(byChr)  ?  byChr  :  '.');
         }
         else
         {
            fprintf(pOut," ");
         }
      }
      
      fprintf(pOut,"\n");
      
      dwOfs += BLOCK_SIZE;
   }
}
Код
000013B0:  EB 06 68 74 3C 00 00 C3 9C 60 E8 02 00 00 00 33  л.ht<..Гњ`и....3
000013C0:  C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 0F 70  А‹ДѓА.“‹г‹[ьЃл.p
000013D0:  40 00 87 DD 8B 85 A6 70 40 00 01 85 03 70 40 00  @.‡Э‹…¦p@..….p@.
000013E0:  66 C7 85 00 70 40 00 90 90 01 85 9E 70 40 00 BB  fЗ….p@.ђђ.…ћp@.»
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.01.2017, 00:08

Выдает ошибку и не читает текст(составить программу для чтения текста)
Надо было составить программу чтобы считывала текст из файла и выводила количество маленьких (4-8...

Нужно создать класс для чтения из файла
Нужно создать класс для чтения из файла.

Создать программу для чтения файлов используя динамический массив
Помогите создать программу

Ошибка 0x0000007E при запуске Windows XP в обычном режиме и ошибка 0x0000007B — в безопасном режиме
При включении компьютера происходила загрузка Windows и потом он резко начинал перезагружаться....

Разработать программу в Delphi 7 для чтения текстового файла и определить количество абзацев из 5 строк.
Помогите пожалуйста составить программу!!!!: Разработать программу в Delphi 7 для чтения...

Каким образом после чтения из файла, узнать позицию для чтения следующего куска байт
Здравствуйте, задача такова есть файл, размером 1000 байт, нужно открыть его считать 100 байт,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru