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

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

09.07.2025, 08:40. Показов 9246. Ответов 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
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
24.07.2025, 13:52
Студворк — интернет-сервис помощи студентам
Специально для ЗДешного человечка.
Если вот прям нужно до символа всё контролировать, то пиши свой лексический анализатор.
Это будет тру вей.
А читать строки, разбивать на подстроки по разделителю, потом обратно в поток или функциями преобразования - это фелс вей. Но ты конечно же пойдешь им. Если вообще пойдешь куда-то, с такими то фантазиями.
0
5 / 5 / 0
Регистрация: 28.12.2019
Сообщений: 26
24.07.2025, 13:57
За всё это я и не люблю текстовые форматы, т.к. как только дашь волю юзеру и возможность редактировать данные где попало, в тех же ноутпад++-ах и пр. - он тут же начнёт там косячить и писать абы как, ну а тебе придётся из-за этого писать парсер тыщь на 10 строк, бред, то ли дело бинарные форматы.
0
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,286
24.07.2025, 15:41
Я когда в stalker играл. Открываешь lti файл (Настройки)
Я не заметил, что бы там было всё через жопу.
Везде у норм. людей порядок.

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

Не по теме:

Цитата Сообщение от SmallEvil Посмотреть сообщение
30 год на дворе
Что то я не очень уверен в светлом будущем...
Что оно будет достаточно светлое.

0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
24.07.2025, 15:53
Цитата Сообщение от hyper_doom Посмотреть сообщение
то ли дело бинарные форматы
Бинарные форматы так же подвержены правкам и бинарной несовместимости.
Цитата Сообщение от hyper_doom Посмотреть сообщение
из-за этого писать парсер тыщь на 10 строк,
Можно использовать готовые решение с их преимуществами и ограничениями, но ничего писать не нужно.
Например: XML, JSON и т.д.

С другой стороны, никто не отменял и подходы описанные тут. Есть ситуации где это вполне приемлемо.

Добавлено через 3 минуты
Цитата Сообщение от hyper_doom Посмотреть сообщение
За всё это я и не люблю текстовые форматы
А как тогда?
10 тыс. утилит для настройки 10 тис конфигурационных файлов, как например в Linux?
Со всем вытекающим безобразием.
0
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,147
Записей в блоге: 2
24.07.2025, 18:38
Предлагаю попробовать написать "по-взрослому". По-моему чтение должно выглядеть так
C++
1
2
template <class Container>
bool ReadCSV( const std::string & fullFileName, Container & dst, std::string * errorInfo = nullptr );
1. Я совсем не фанат темплейтов (скорее наоборот), но здесь темплейт напрашивается. В самом деле, а если потребуется читать инты или флоты? Или просто нужно складывать в другой контейнер? Будем (позорно) копи-пастить? Обычно говорят типа "вот когда надо будет - тогда и буду думать!". Увы, необходимость возникает гораздо раньше чем ожидается, а мочить рабочий код всегда противно.

2. Как показать юзеру ошибку. Этого мы знать не можем, надо написать так чтобы ReadCSV можно было юзать как в консольном приложении, так и в UI с окнами. Поэтому пусть ReadCSV формирует строку ошибки (если она вообще нужна), а за ее показ отвечает вызывающий. Правда и здесь мы можем не знать напр язык (Russian/English), ну ладно, мы не стремимся "объять все" (но стремимся к этому ). Собсно ошибок тут - кот наплакал
Error reading csv: can't open file xxxx
Error reading csv: line xxx position xxx. Value expected
Error reading csv: line xxx position xxx. Comma expected
3. Индикатор. Текстовики бывают гигабайтными, прогресс показывать надо. Думаю с этим можно не торопиться, добавим если потребуется, ломать не придется

Пока все, обсуждаем, интересно что дальше - продолжим
0
Нарушитель
7097 / 2328 / 353
Регистрация: 10.12.2013
Сообщений: 8,042
24.07.2025, 20:12
Опять ?? Ролевая игра Заказчик / Исполнитель ?
Хорошо.

Итак, Заказчик - крупный промышленный холдинг народно-художественных промыслов;
Исполнитель - молодая амбициозная софтверная компания выпускников физтеха, остро заточенная на
чтение из текстового файла данных, разделённых запятой. Есть в компании опытные программисты, за плечами которых сотни проектов и миллионы прочитанных строк, но есть и просто студенты выпускного курса в очках и работающие просто за еду.

Заказчик:
- народно-художественная нужда заставила нас обратиться квашей компании. Из найденного в лесу файла нам необходимо прочитать таинственные числа с буквой х и превратить их в шесть народных цветных байт. матриошки будем этим красить.

Исполнитель:
- Дело непростое, да что уж там - сложное это дело ! Данные вы нашли в лесу, кто ж знает,
сколько там они лежали? запятые могли осыпаться или превратиться в точки, а это уже флоты, понимаете ?
Да и пробелы могли просто схлопнуться.
Тут не обойтись без контейнеров. А у нас, you know, C++, всё строго, не забалуешь, у нас стандартные потоки (это идиома), а ну как ошибка какая или того хуже прошляпим ексепшн ? Нежданчик.

Короче, с вас 6 000 000, а мы в прорыв бросим лучших.

Собственно, вот код. Как обещали.
C++
1
2
template <class Container>
bool ReadCSV( const std::string & fullFileName, Container & dst, std::string * errorInfo = nullptr );
Заказчик:
- Работает ?

Исполнитель:
- Нет. Это просто код. Просто какой-то код. Набросок. Сложно всё. Завтра проведём планёрку и начнём компилировать.
1
24.07.2025, 23:30

Не по теме:

ох уж эти теоретики, все мусолят и мусолят тему...

0
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,286
25.07.2025, 01:42
Такое конечно всем в падлу (старьё, не современно), но оно решает...
Если подольше за этим посидеть, можно было бы получше отладить и мессаги навешать.
Наличие файла я не проверял.... Просто пример...

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
int main()
{
    //========================================
    std::ifstream fin;
    fin.open("primer.txt");// , ifstream::binary
    fin.seekg(0, std::ios_base::end);
    unsigned int volume = fin.tellg();//Это размер файла в байтах
    fin.seekg(0, std::ios_base::beg);
    // ----------------------------- Создаём массив и набиваем в него весь текст,
    
    char *ms = (char*)calloc(sizeof(char), volume + 10);
    char *ms_n = ms;
        std::string msg = "";
    
while ( std::getline(fin, msg))strcat(ms, msg.c_str());// Набил весь массив
    
while (*ms_n != '\0') {// Пробегаю по всему тексту...
 
    if (*ms_n == '0' && *(ms_n + 1) == 'x') {// Нахожу  " 0x "
        
bool ex{ true };
    for (short num = 2; num < 7; ++num) {// Проверка на символы, того что лежит дальше
            char comp = *(ms_n + num);
            if (comp > '/' && comp < ':' || comp >= 'a' && comp <= 'h');
            else ex = false;
        }
    if (ex) {// Если порядок
            char res[8]{};
            strncpy(res, ms_n + 2, 6);// Как то так... Я здесь просто на экран вывел
                                         printf("%s\n", res);
        ms_n += 5;// Выпрыгнуть дальше
        }
    }
++ms_n;
}
free(ms);
getchar();
}
Ищет волшебное "0x", проверяет за ним шесть символов
0
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,286
25.07.2025, 01:44


0
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,286
25.07.2025, 01:54
Можно было написать не шесть символов, а пока символы....
Не десять тыщ строк...
0
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,286
25.07.2025, 02:00
И вот так работает...
0
26.07.2025, 16:39

Не по теме:

Давно хотел сказать.
Вот в таком виде трупно-страусиный потоковый оператор смотрится ужасно:
cin << x << y

а вот в таком вполне прилично:

cout « x « y

cin » x » y

Ничем не перегружен, один символ, один ANSI байт, прекрасно различим.


Я неправ ?

0
26.07.2025, 16:46

Не по теме:

Цитата Сообщение от volodin661 Посмотреть сообщение
Ничем не перегружен, один символ, один ANSI байт, прекрасно различим.
Я неправ ?
Да, неправ.
» - это не ASCII символ.

Да и на вид ещё хуже. Под микроскопом нужно рассматривать что там за херотенька.

0
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,147
Записей в блоге: 2
26.07.2025, 17:59
Цитата Сообщение от volodin661 Посмотреть сообщение
Сложно всё. Завтра проведём планёрку и начнём компилировать.
Откуда такое впечатление? Нормальный программист рисует это все за полчаса, с перекурами. Потом может еще столько же на тестирование и отладку. Конечно не "моментально", надо немного обдумать, спланировать, но ничего сложного.

Может пугают обобщения? (темплейты и все такое). Поверьте, это детский лепет для садистов, напр любителей дуста. Почему только std::string? Должно быть в общем виде, для wstring, QString и др! Ну мы же не звери
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
27.07.2025, 19:13
Цитата Сообщение от volodin661 Посмотреть сообщение
Я неправ ?
Частично. Выбор операторов >> и << был явно неудачен, так как эти операторы уже были зарезервированы для операций побитового сдвига. То есть применение зависит от контекста. И такого много.. А почему пара, а не одиночная скобка? Разница? Нет разницы. Вот так померещилось страусу.. И это не стрелочки, а скобочки.. да еще двойные.
Форма: cin << x << y не выражает наглядно процесс ввода, так как x все правильно идет в cin, а y уже не очевидно куда: в x или в cin. То есть чтобы это понять надо в голове прокрутить работу компилятора. А зачем?
Слава Богу в c# от этого ужаса отказались.
0
Нарушитель
7097 / 2328 / 353
Регистрация: 10.12.2013
Сообщений: 8,042
29.07.2025, 13:26
Признаюсь, сама идея не моя. это всё Ларри.
а он просто так ничего не придумывает.
он думает перед этим несколько лет.
Сначала непривычно, но потом понимаешь, что он опять прав.
Из одиночных неюникодных символов ничего лучше для указателя направления потока НЕТ.

00ab «
00bb »
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.07.2025, 13:26

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 в виде такой...


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

Или воспользуйтесь поиском по форуму:
76
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru