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

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

09.07.2025, 08:40. Показов 9227. Ответов 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
 Аватар для Наталья8
624 / 382 / 67
Регистрация: 09.03.2016
Сообщений: 4,269
21.07.2025, 12:08
Студворк — интернет-сервис помощи студентам
Я тоже хотел написать. Все ошибки предусмотреть нельзя.
Такие тексты должны быть точные..

Добавлено через 16 минут
SmallEvil,
Ты хочешь научить меня С++17.
Во мне боряться два демона. - С++17 это совсем не плохо.
И нахрена он мне нужен....
0
 Аватар для Наталья8
624 / 382 / 67
Регистрация: 09.03.2016
Сообщений: 4,269
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
 Аватар для Наталья8
624 / 382 / 67
Регистрация: 09.03.2016
Сообщений: 4,269
21.07.2025, 12:40
Борьба с шизою... А она всё равно придёт...
(К молодым тоже иногда приходит.)
0
 Аватар для Наталья8
624 / 382 / 67
Регистрация: 09.03.2016
Сообщений: 4,269
21.07.2025, 12:43
Цитата Сообщение от SmallEvil Посмотреть сообщение
Это древнее древнего
Глубоко копаешь...
0
 Аватар для Наталья8
624 / 382 / 67
Регистрация: 09.03.2016
Сообщений: 4,269
21.07.2025, 12:55
Без включения С++17 -- Однозначно не работает.



0
Нарушитель
7094 / 2325 / 353
Регистрация: 10.12.2013
Сообщений: 8,028
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
6499 / 5730 / 1133
Регистрация: 11.10.2019
Сообщений: 15,318
21.07.2025, 14:38
volodin661, в свиче работает тоже
0
Нарушитель
7094 / 2325 / 353
Регистрация: 10.12.2013
Сообщений: 8,028
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
Нарушитель
7094 / 2325 / 353
Регистрация: 10.12.2013
Сообщений: 8,028
21.07.2025, 16:55
Тут дело не в собственно возможности инициализации при использовании оператора,
а в области видимости переменной, которую инициализируют с помощью данного синтаксиса и, соответственно ,
живёт эта переменная только в лексической области видимости данного оператора ( грубо говоря, внутри фигурных скобок )

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

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

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

Добавлено через 4 минуты
Цитата Сообщение от Igor3D Посмотреть сообщение
Чем не угодил простой стандартный формат: числа разделяются запятой?
Что за стандарт? И у автора темы именно такой файл и есть, только символы перевода строки всё портят. Избавиться от них проще простого, десятки вариантов как это сделать. Например, посмотреть в hex редакторе, какие именно переводы строки используются - и программно заменить их на те же "стандартные" запятые.
0
 Аватар для Наталья8
624 / 382 / 67
Регистрация: 09.03.2016
Сообщений: 4,269
22.07.2025, 04:03
Цитата Сообщение от SmallEvil Посмотреть сообщение
деды курочат пень третий
Я пользу в програмировании ищу. А не понты наводить.
0
 Аватар для Наталья8
624 / 382 / 67
Регистрация: 09.03.2016
Сообщений: 4,269
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
6499 / 5730 / 1133
Регистрация: 11.10.2019
Сообщений: 15,318
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
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru