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

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

09.07.2025, 08:40. Показов 9026. Ответов 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
Нарушитель
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,164
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
1976 / 832 / 115
Регистрация: 01.10.2012
Сообщений: 5,061
Записей в блоге: 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
 Аватар для volodin661
6813 / 2313 / 351
Регистрация: 10.12.2013
Сообщений: 7,981
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
Нарушитель
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,164
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
Нарушитель
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,164
25.07.2025, 01:44


0
Нарушитель
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,164
25.07.2025, 01:54
Можно было написать не шесть символов, а пока символы....
Не десять тыщ строк...
0
Нарушитель
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,164
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
1976 / 832 / 115
Регистрация: 01.10.2012
Сообщений: 5,061
Записей в блоге: 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
 Аватар для volodin661
6813 / 2313 / 351
Регистрация: 10.12.2013
Сообщений: 7,981
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
Ответ Создать тему
Новые блоги и статьи
Свет внутри себя
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: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru