1 / 1 / 0
Регистрация: 17.01.2020
Сообщений: 33

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

09.07.2025, 08:40. Показов 9224. Ответов 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
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,261
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,131
Записей в блоге: 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
7094 / 2325 / 353
Регистрация: 10.12.2013
Сообщений: 8,027
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
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,261
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
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,261
25.07.2025, 01:44


0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,261
25.07.2025, 01:54
Можно было написать не шесть символов, а пока символы....
Не десять тыщ строк...
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,261
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,131
Записей в блоге: 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
7094 / 2325 / 353
Регистрация: 10.12.2013
Сообщений: 8,027
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Кредитный калькулятор
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
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru