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

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

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

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

Добавлено через 21 час 25 минут
частично написал программу, но не могу найти как вывести в шестнадцатеричном виде то что я скопировал с файла в char переменную (буфер). прошу помощи!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2017, 20:15
Ответы с готовыми решениями:

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

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

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

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

Как открыть файл для чтения в БИНАРНОМ режиме?
Друзья! Файл, который надо открыть БИНАРНЫЙ, в нём два байта. Содержание файла...

6
Байт
Эксперт C
19841 / 12501 / 2639
Регистрация: 24.12.2010
Сообщений: 25,916
14.01.2017, 20:37 2
Цитата Сообщение от popilsjawa Посмотреть сообщение
частично написал программу,
Покажи свой код. Тогда может быть и помогу. Перечитай правила. Обрати внимание на п.4.7
0
popilsjawa
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
19841 / 12501 / 2639
Регистрация: 24.12.2010
Сообщений: 25,916
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
popilsjawa
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
19841 / 12501 / 2639
Регистрация: 24.12.2010
Сообщений: 25,916
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
gazlan
3161 / 1920 / 312
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 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
15.01.2017, 00:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2017, 00:08

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

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

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


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

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

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