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

Чтение 16-ичных чисел из текстового файла

09.07.2025, 08:40. Показов 9029. Ответов 75
Метки нет (Все метки)

Доброго времени ! Подскажите , как сделать чтение чисел из файла , прочитал кучу всяких примеров , только сильнее запутался.
Есть файл , в нем заголовок вида
C++
1
" Бла Бла Бла :"
и далее числа вида
C++
1
2
3
0x000001,0x000002,0x000003,0x000004,0x000005,0x000006,0x000007,0x000008,0x000009,0x000010,0x000011,0x000012,0x000013,0x000014,0x000015,0x000016,
0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0xffffff,0xffffff,0x000000,0xffffff,0xffffff,
0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x100099
мне нужно считать числа после "0x" в массив интов.
заголовок я читаю
C++
1
2
3
4
 
ifstream file("primer.txt");
getline(file,line,'\n');
        cout << line<<endl;
После этого у меня указатель попадает на первое число. Далее в цикле я читаю до конца, т.к количество чисел известно.

C++
1
2
3
 getline(file,line,',');       // читаю 0х00000 до запятой 
                     line2 = line.substr(2, 6);         // отбрасывю 0х           
                    cout << line2;
и сталкиваюсь с тем, что после 16й считанной строки выводится один символ"х".
Я так понимаю это из за наличия в файле символа перевода строки '\n'. и дальше я застопорился, не могу придумать как убрать этот символ, получается какой-то нерабочий изврат из кучи условий и проверок. Как организовать рабочий ввод чисел ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.07.2025, 08:40
Ответы с готовыми решениями:

Конвертер целых чисел для преобразования в 16-тиричную, 8-ричную, 3-ичную, 2-ичную системы
Калькулятор для конвертера целых чисел в системы счисления: 16-тиричную, 8-ричную, 3-ичную, 2-ичную

Перевести 16-ичное текстовое значение в целое число
Есть string значения '0x99' как записать это как байт в переменную byte=0x99 привер: String...

Прочитать из файла числа в 16-ичной кодировке
Добрый вечер! Подскажите пожалуйста. У меня в файле записана следующая строка b6589fc6abdc8ac. Я её...

75
Нарушитель
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,166
21.07.2025, 12:08
Я тоже хотел написать. Все ошибки предусмотреть нельзя.
Такие тексты должны быть точные..

Добавлено через 16 минут
SmallEvil,
Ты хочешь научить меня С++17.
Во мне боряться два демона. - С++17 это совсем не плохо.
И нахрена он мне нужен....
0
Нарушитель
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,166
21.07.2025, 12:09

Такое теперь выскакивает в ответ на любой вопрос.
Ии... Надо сказать, оно не лишено смысла...
(Вообще, с классами, которые ты использовал,
получаеться некоторая избыточность.
Буквы, которых не видно, это тоже буквы. И их получаеться много лишних....)
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
21.07.2025, 12:16
Цитата Сообщение от Наталья8 Посмотреть сообщение
Ты хочешь научить меня С++17.
Тебе это не нужно.


Добавлено через 1 минуту
p.s. И это не С++ 17. Это древнее древнего.
1
Нарушитель
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,166
21.07.2025, 12:40
Борьба с шизою... А она всё равно придёт...
(К молодым тоже иногда приходит.)
0
Нарушитель
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,166
21.07.2025, 12:43
Цитата Сообщение от SmallEvil Посмотреть сообщение
Это древнее древнего
Глубоко копаешь...
0
Нарушитель
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,166
21.07.2025, 12:55
Без включения С++17 -- Однозначно не работает.



0
 Аватар для volodin661
6816 / 2316 / 351
Регистрация: 10.12.2013
Сообщений: 7,985
21.07.2025, 14:06
Цитата Сообщение от SmallEvil Посмотреть сообщение
C++
1
if(std::ifstream in("input.txt"); in.is_open()){}
хм-м..
интересно. в операторе if эти изыски версии 17 работают, а в тернарном операторе - нет,
как-то это совсем не очевидно для взгляда со стороны.
оператор while на изыск не проверял, в нём тоже не работают ?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
21.07.2025, 14:24
Цитата Сообщение от Наталья8 Посмотреть сообщение
Без включения С++17 -- Однозначно не работает.
Я писал о std::ctype<char>, что является ключевым в моем примере.
И как уже упомянули, от С++17 там только if statement with initializer .

Добавлено через 4 минуты

Не по теме:

30 год на дворе, деды курочат пень третий.
- Нам что, с++ 20 учить???
=)

0
фрилансер
 Аватар для Алексей1153
6489 / 5717 / 1133
Регистрация: 11.10.2019
Сообщений: 15,256
21.07.2025, 14:38
volodin661, в свиче работает тоже
0
 Аватар для volodin661
6816 / 2316 / 351
Регистрация: 10.12.2013
Сообщений: 7,985
21.07.2025, 15:05
Цитата Сообщение от Алексей1153 Посмотреть сообщение
volodin661, в свиче работает тоже
yes, я это сразу увидел и тут же полез проверять тернарный, который по непонятным причинам обделили инициализацией, а сейчас заодно проверил и while, который тоже обделили.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
21.07.2025, 16:36
Цитата Сообщение от volodin661 Посмотреть сообщение
сейчас заодно проверил и while, который тоже обделили
Просто решили не гнуть тафтологию.
Цикл с предусловием while с инициализацией это тот же for.
А цикл с постусловием с инициализацией вообще лишен смысла.

Зачем натягивать [сам знаешь что] на глобус?

Добавлено через 2 минуты
Хотя впервые тоже подумал что и в while могло бы так быть
0
 Аватар для volodin661
6816 / 2316 / 351
Регистрация: 10.12.2013
Сообщений: 7,985
21.07.2025, 16:55
Тут дело не в собственно возможности инициализации при использовании оператора,
а в области видимости переменной, которую инициализируют с помощью данного синтаксиса и, соответственно ,
живёт эта переменная только в лексической области видимости данного оператора ( грубо говоря, внутри фигурных скобок )

[ Это я так предполагаю, я не читал документацию на самом деле ]

И если это так, то и для while данный синтаксис будет имеет смысл.
0
1976 / 832 / 115
Регистрация: 01.10.2012
Сообщений: 5,063
Записей в блоге: 2
21.07.2025, 20:10
Цитата Сообщение от alexu_007 Посмотреть сообщение
А где в задании указано, что требуется обработка ошибок? Так же может быть точка вместо запятой, буква О вместо нуля, русская "х" вместо латинской - и т.д. и т.п. Программист должен гадать на кофейной гуще, и писать сразу код на все случаи жизни?
Правила те же самые что для с/с++ ф-ций которые переводят строки в число
Цитата Сообщение от alexu_007 Посмотреть сообщение
Нужно просто уточнить, разделителем чисел является "запятая или символ возврата строки", или тупо ищем "0x" и читаем hex число позади него? Забив на запятые и другие разделители, которые нужны для человека (что бы красивше на экране было нарисовано), а не для компутера?
Чем не угодил простой стандартный формат: числа разделяются запятой?
число - запятая - число .... число - запятая - число
В простейшем случае файл может быть одной такой строкой, вообще без всяких пробелов. Юзер имеет право долить любое число "whitespace" (пробелов, тапок, концов строк и др) как хочет для своего удобства, нельзя только разбивать числа. Между двумя числами должна быть запятая, иначе ошибка. Число должно быть hex, иначе ошибка. Никакой "обработки" не требуется, при обнаружении первой ошибки немедленно выходим, считаем весь файл "не прошел", но ошибка должна быть внятно показана юзеру

Чем больше Вы чего-то выясняете, уточняете, пытаетесь как-то словчить, еще упростить, взять на голос и.т.п. - тем хуже для Вас, танцору все время что-то мешает
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,305
21.07.2025, 21:56
Цитата Сообщение от Igor3D Посмотреть сообщение
В простейшем случае файл может быть одной такой строкой, вообще без всяких пробелов.
В простейшем случае файл может быть без запятых, и даже без "0х" - просто последовательность цифр, из которой нужно брать по 6 штук. А ещё проще - записать бинарный файл из int, тогда и переводить ничего никуда не надо будет.

Добавлено через 4 минуты
Цитата Сообщение от Igor3D Посмотреть сообщение
Чем не угодил простой стандартный формат: числа разделяются запятой?
Что за стандарт? И у автора темы именно такой файл и есть, только символы перевода строки всё портят. Избавиться от них проще простого, десятки вариантов как это сделать. Например, посмотреть в hex редакторе, какие именно переводы строки используются - и программно заменить их на те же "стандартные" запятые.
0
Нарушитель
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,166
22.07.2025, 04:03
Цитата Сообщение от SmallEvil Посмотреть сообщение
деды курочат пень третий
Я пользу в програмировании ищу. А не понты наводить.
0
Нарушитель
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,166
22.07.2025, 13:12
Что есть польза? Сомнительная конечно, но польза.
(Пакетное преобразование по учёному называеться, что ли?)
На семёрке работал, такие файлы ни чего не открывало.
И сейчас фотошоп не открывает. Мессенджер не открывает.

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
// ============== Поиск в папке файлов webp и преобразование их в png =========
// =================================== (Вызывает vi_ddy.Update)
                                    //  tm_t ---  Время кадра
bool transform(wchar_t *r_szSrcPath, static float tm_t)
{
    static bool er_exit(true);
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind;
    wchar_t l_szTmp[512] = { 0 };
    wmemcpy(l_szTmp, r_szSrcPath, wcslen(r_szSrcPath));
 
    wchar_t l_szSrcPath[512] = { 0 };
    wmemcpy(l_szSrcPath, r_szSrcPath, wcslen(r_szSrcPath));
    
    wchar_t l_szNewSrcPath[512] = { 0 };
    wcscat(l_szTmp, L"*");
 
    hFind = FindFirstFile(l_szTmp, &FindFileData);
    if (hFind == NULL) return FALSE;
 
                        do
                        {
                   if (!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
                       {
                    wchar_t l_szSrcFile[512] = { 0 };
        swprintf(l_szSrcFile, L"%s%s", l_szSrcPath, FindFileData.cFileName);
            //--------------------------------------------------------- 
        char *szTo{ NULL };
        if (memcmp(l_szSrcFile + (wcslen(l_szSrcFile) - 5), L".webp", 10) == 0){// Если расширение найденного файла .webp
                //------------------------------------
                szTo = new char[wcslen(l_szSrcFile) + 1];   //----------------Грузить  (перетаскиванием)
                szTo[wcslen(l_szSrcFile)] = '\0';
                WideCharToMultiByte(CP_ACP, 0, l_szSrcFile, -1, szTo, wcslen(l_szSrcFile), NULL, NULL);
//------------------------------------------------ Создание переменной класса и преобразование найденного .webp в .png
                //printf("%s\n", szTo);
            bool one_enter = false;
                Video vi_ddy(szTo, false, true);
                        int num_of_try(0);
            while (vi_ddy.Update(tm_t, one_enter, ".webp") == 0 && ++num_of_try < 25);// точка с запятой надо. она выполняеться
                        if (num_of_try > 10) er_exit = false;
                                    
                //------------------------------------
            }
    if(szTo !=NULL)
        if (remove(szTo) != 0)             // удаление файла file.txt
            std::cout << "File deletion error\n";
        else
            std::cout << "File deleted success\n";
        delete[] szTo;
                   }   
                        } while (FindNextFile(hFind, &FindFileData));
        FindClose(hFind);
                     return er_exit;
}
Ещё осталось FFMPEG подогнать и SFML...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
m_Texture.update(m_pBuffer);// ЗДЕСЬ ДЕЛАЕТ УПДАТЕ
 
                if (out_patch != NULL && size_divider == 1) {// Выбросить файл - картинку
        char buf_tmp[BUFFER_SIZE]{};
                    if (strlen(out_patch) == 5)
                     {
// Преобразовать webp в png
                        strcpy(buf_tmp, m_sFilename.c_str());
                        *(strrchr(buf_tmp, '.') + 1) = '\0';
                        strcat(buf_tmp, "png");
                        Beep(4000, 5);
                      }
                    else {
// бросить одну картинку из кино в рабочий фолдер
                        strcpy(buf_tmp, out_patch);
                        *(strrchr(buf_tmp, '\\') + 1) = '\0';
                        strcat(buf_tmp, "new_frame.png");
                        Beep(4000, 5);
                      }
                    m_Texture.copyToImage().saveToFile(buf_tmp);
                }
Добавлено через 34 минуты
Это я на видеорезчике написал....
Отдельно такое конечно напряжно будет...
Надо инициализировать ffmpeg.. Открывать им файлы...
0
5 / 5 / 0
Регистрация: 28.12.2019
Сообщений: 26
23.07.2025, 13:36
C++
1
2
3
4
5
6
std::fstream fs("c:/00-11/primer.txt", std::ios::in);   
std::string token;
std::getline(fs, token);//skip first line
std::vector<int> data;  
while (std::getline(fs, token, ','))        
   data.push_back(std::stoi(token, nullptr, 16));
0
23.07.2025, 23:07

Не по теме:

Цитата Сообщение от hyper_doom Посмотреть сообщение
C++
1
2
while (std::getline(fs, token, ','))        
   data.push_back(std::stoi(token, nullptr, 16));
Когда не нужно проверять никаких ошибок - программирование становится легким и приятным :)

0
фрилансер
 Аватар для Алексей1153
6489 / 5717 / 1133
Регистрация: 11.10.2019
Сообщений: 15,256
24.07.2025, 11:35
Цитата Сообщение от Igor3D Посмотреть сообщение
std::stoi
а исключения ловить кто будет?
0
5 / 5 / 0
Регистрация: 28.12.2019
Сообщений: 26
24.07.2025, 13:23
Цитата Сообщение от Igor3D Посмотреть сообщение
Когда не нужно проверять никаких ошибок - программирование становится легким и приятным
так проверка ошибок - это уже дело "клиента", не буду же я за него писать полноценную программу, наша цель показать ему как, а в деталях пусть сам разбирается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.07.2025, 13:23

2-ичное представление числа типа double или float?
помогите разобратся,,,, плиз)) double a=1991.829; a==01000000 10011111 00011111 01010000 11100101...

Есть ли буква в 16-ичной записи целого числа
Спешу.Пишу кусок задания.1)Составить логическую функцию которая для одного целого числа определяет...

Составить программу для перевода данного натурального числа в p-ичную систему счисления
Составить программу для перевода данного натурального числа в p-ичную систему счисления (2 &lt; р &lt;...

дано число в К-ичной системе счисления
an an-1 ...а0 (К&lt;=36). найти остаток от деления его на m. числа К,n,m, как и остаток от деления на...

Получить q ичное представление числа
Даны натуральные числа p и q(q&gt;=2).Получить q-ичное представление числа p в виде такой...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru