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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
power12
6 / 6 / 1
Регистрация: 14.04.2010
Сообщений: 100
#1

неправильно отображает файл в HEX режиме - C++

14.08.2013, 15:53. Просмотров 449. Ответов 8
Метки нет (Все метки)

открываю файл.
в файле записано
"єЄєЄєЄєЄєЄєЄєЄє«"
вывожу, получается


File is opening for work!
FFFFFFBA FFFFFFAA FFFFFFBA FFFFFFAA FFFFFFBA FFFFFFAA FFFFFFBA FFFFFFAA FFFFFFB
A FFFFFFAA FFFFFFBA FFFFFFAA FFFFFFBA FFFFFFAA FFFFFFBA FFFFFFAB
должно быть без FFFFFF.

когда открываю обычный нормальный txt файл, с адекватными данными, то все получается хорошо.

например в файле

qwertyuiop[ASDFGHJKL;'ZXCVBNM,./
на выходе

File is opening for work!
71 77 65 72 74 79 75 69 6F 70 5B 41 53 44 46 47
48 4A 4B 4C 3B 27 5A 58 43 56 42 4E 4D 2C 2E 2F

почему так?

как избавиться от
FFFFFF
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dremer
8 / 8 / 0
Регистрация: 18.06.2012
Сообщений: 33
14.08.2013, 16:03     неправильно отображает файл в HEX режиме #2
Покажи код, как ты выводишь.
power12
6 / 6 / 1
Регистрация: 14.04.2010
Сообщений: 100
14.08.2013, 16:17  [ТС]     неправильно отображает файл в HEX режиме #3
Цитата Сообщение от dremer Посмотреть сообщение
Покажи код, как ты выводишь.
разобрался, надо было сделать всего лишь, что бы не было FFFFFF
то бишь беззнаковое unsigned


C++
1
unsigned char buf[500];
ну и вывод
C++
1
2
3
4
5
        
    for(i = 0; i < fTell; i++)
    {
        printf("%02X", buf[i]);
    }
nonedark2008
820 / 578 / 111
Регистрация: 28.07.2012
Сообщений: 1,540
14.08.2013, 16:22     неправильно отображает файл в HEX режиме #4
power12, покажи код полностью! С записью данных в файл и с их считыванием.
power12
6 / 6 / 1
Регистрация: 14.04.2010
Сообщений: 100
14.08.2013, 16:32  [ТС]     неправильно отображает файл в HEX режиме #5
Цитата Сообщение от nonedark2008 Посмотреть сообщение
power12, покажи код полностью! С записью данных в файл и с их считыванием.
пожалуйтса

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
FILE *file;
unsigned char buf[500];
unsigned char c;
 
if((file = fopen("C:\\health.txt" , "rb")) == NULL)
    {
        printf ("Error \n");
    }
    printf("File is opening for work! \n");
 
    fread(buf,sizeof(c),200,file);
 
    int i;
 
    long fTell;
    fTell = ftell(file);
    int k = 0;
    for(i = 0; i < fTell; i++)
    {
        printf(" %02X", buf[i]);
        if (k == 15)
        {
            printf("|");
            printf("\n");
            k = 0;
            continue;
        }
        k++;
        
    }
 
    printf("\n");
    return 0;
}
без unsigned получается ерунда
nonedark2008
820 / 578 / 111
Регистрация: 28.07.2012
Сообщений: 1,540
14.08.2013, 16:44     неправильно отображает файл в HEX режиме #6
power12, скомпилировал у себя - все выводится верно. Проблема в чем-то другом.
power12
6 / 6 / 1
Регистрация: 14.04.2010
Сообщений: 100
14.08.2013, 16:48  [ТС]     неправильно отображает файл в HEX режиме #7
Цитата Сообщение от nonedark2008 Посмотреть сообщение
power12, скомпилировал у себя - все выводится верно. Проблема в чем-то другом.
скомпилируй без unsigned

что бы было
C++
1
char buf[500];
а в файле было(см вложение)
Вложения
Тип файла: txt health.txt (87 байт, 5 просмотров)
nonedark2008
820 / 578 / 111
Регистрация: 28.07.2012
Сообщений: 1,540
14.08.2013, 17:04     неправильно отображает файл в HEX режиме #8
power12, твоя проблема в том, что %02X используется для беззнакового вывода. Тем более тип там подразумевается unsigned int. Т.е. твой char будет преобразован в unsigned int. Далее 02X - это указание минимальной длины, т.е. длина может быть больше. А когда преобразуется отрицательный char в int - получает фигню типа FFFFFF1D и она вся выводится.
Так что в твоем случае нужно что-то типа:
C++
1
printf(" %02X", (unsigned char)buf[i]);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2013, 17:10     неправильно отображает файл в HEX режиме
Еще ссылки по теме:

Fread неправильно считывает файл C++
Открытие файла в режиме HEX C++
Неправильно записывает в файл C++
Неправильно читает файл C++
Неправильно выдается матрица в консольном режиме C++

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

Или воспользуйтесь поиском по форуму:
power12
6 / 6 / 1
Регистрация: 14.04.2010
Сообщений: 100
14.08.2013, 17:10  [ТС]     неправильно отображает файл в HEX режиме #9
Цитата Сообщение от nonedark2008 Посмотреть сообщение
power12
Так что в твоем случае нужно что-то типа:
C++
1
printf(" %02X", (unsigned char)buf[i]);
спасибо большое!
Yandex
Объявления
14.08.2013, 17:10     неправильно отображает файл в HEX режиме
Ответ Создать тему
Опции темы

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