Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.81/26: Рейтинг темы: голосов - 26, средняя оценка - 4.81
3 / 3 / 2
Регистрация: 25.04.2014
Сообщений: 87

Работа с двоичным файлом: Перевести содержание файла в поток байт

03.12.2014, 17:07. Показов 6079. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Существует файл D:\proba.txt в себе он содержит: 68 11 00 00 00 00 71 00 00 00 09 01 C8 01 00 00 01... Он довольно таки длинный до 253 символов. Необходимо с помощью C++ или C# перевести содержание файла в поток байт по типу: 0х68 0х11 0х00 и т.д.. Затем из полученного перевода составить таблицу в консоле примерно такую:
HEX(16) DEC Значение
6 6 Start Byte
8 8 Start Byte
C 12 Long Packet
....

Начал делать уткнул в том что на С++ массив не работает с CHAR в С# что тип long не понимает тип char помогите сделать или разобраться.
Вложения
Тип файла: txt Proba.txt (369 байт, 7 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.12.2014, 17:07
Ответы с готовыми решениями:

Работа с двоичным файлом
Условие: Дан файл, представляющий собой телефонную книжку некоторого молодого человека, т.е. только семизначные номера сотовых телефонов....

Работа с двоичным файлом
Ребят помогите. Создать двоичный файл и записать в него степени числа 3. Вывести на экран компоненты файла с четным порядковым номером....

Как считать каждый байт из файла, используя поток?
Исходный файл содержит информацию порциями по 55 байт (пакеты). Необходимо прочитать каждый байт например в массив. Тогда получается будет...

47
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
27.12.2014, 14:27
Студворк — интернет-сервис помощи студентам
Проверил, фрагмент рабочий. На одной последовательности. У тебя их, наверное, много и они в один массив попадают. Тебе первая нужна или все?
0
3 / 3 / 2
Регистрация: 25.04.2014
Сообщений: 87
29.12.2014, 11:57  [ТС]
Все по очереди сначало первый фрагмент нашел показал разобрал потом второй фрагмент после ентера к примеру или нажатия какой то кнопки
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
29.12.2014, 15:33
Ну тогда после внутреннего while() ставь обработку и потом очищай F.
0
3 / 3 / 2
Регистрация: 25.04.2014
Сообщений: 87
12.01.2015, 16:41  [ТС]
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
#include <cstdlib>
#include <iostream>
#include <vector>
#include <sstream>
#include <fstream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
vector<unsigned> F;
unsigned FS;
string s;
size_t n;
istringstream ss;
 
ifstream ifs("D:\\1.txt"); 
 
while (!ifs.eof())
{
    getline(ifs, s);
    if ((n = s.find("68")) != string::npos)
    {
        if (s.length() - n >= 5)
        {
            if (!isxdigit(s[n + 2]) && s.substr(n + 3, 2) == "11")
            {
                F.push_back(0x68);
                F.push_back(0x11);
                ss.str(s.substr(n + 5));
                while (!ss.eof())
                {
                    ss >> hex >> FS;
                    ss.get();
                    F.push_back(FS);
                    cout << "\n" << "\n" <<"Packet:" << "\n";
                    for (int i=0; i < F.size();i++){
                    cout << F[i] << " ";}     
            }
 F.clear();                  
                }
         
        }
    }
}
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
Что я не так написал??? он записывает не весь пакет, а часть и потом в конец добавляет по 1 элементу.
Вложения
Тип файла: txt 1.txt (14.3 Кб, 4 просмотров)
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
13.01.2015, 13:52
Рано вывод и очистку делаешь. Там ещё не всё собралось.
После 44-й строки вставь.
0
3 / 3 / 2
Регистрация: 25.04.2014
Сообщений: 87
13.01.2015, 15:25  [ТС]
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
#include <cstdlib>
#include <iostream>
#include <vector>
#include <sstream>
#include <fstream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
vector<unsigned> F;
unsigned FS;
string s;
size_t n;
istringstream ss;
 
ifstream ifs("D:\\1.txt"); 
 
while (!ifs.eof())
{
    getline(ifs, s);
    if ((n = s.find("68")) != string::npos)
    {
        if (s.length() - n >= 5)
        {
            if (!isxdigit(s[n + 2]) && s.substr(n + 3, 2) == "11")
            {
                F.push_back(0x68);
                F.push_back(0x11);
                ss.str(s.substr(n + 5));
                while (!ss.eof())
                {
                    ss >> hex >> FS;
                    ss.get();
                    F.push_back(FS);
            }
          }
        }
    }
cout << "\n" << "\n" <<"Packet:" << "\n";
                    for (int i=0; i < F.size();i++){
                    cout << F[i] << " ";}  
  F.clear();  
}
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
Теперь 1 пакет остальное пусто
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
13.01.2015, 18:03
Небольшие исправления. Проверил - работает. Весь фрагмент бери.
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
    std::vector<unsigned> F;
    unsigned FS;
    string s;
    size_t n;
    std::istringstream ss;
 
    std::ifstream ifs("D:\\1.txt"); 
 
    while (!ifs.eof())
    {
        getline(ifs, s);
        if ((n = s.find("68")) != string::npos)
        {
            if (s.length() - n >= 5)
            {
                if (!isxdigit(s[n + 2]) && s.substr(n + 3, 2) == "11")
                {
                    F.push_back(0x68);
                    F.push_back(0x11);
                    ss.str(s.substr(n + 5));
                    ss.clear();
                    while (!ss.eof())
                    {
                        ss >> std::hex >> FS;
                        ss.get();
                        F.push_back(FS);
                    }
                }
            }
        }
 
        if (F.size() > 0)
        {
            for (int i = 0; i < F.size(); ++i)
            {
                cout << std::hex << std::setw(2) << std::setfill('0') << F[i] << " ";
                if ((i + 1) % 16 == 0) cout << endl;
            }
            F.clear();
            cout << endl << endl;
        }
 
    }
0
3 / 3 / 2
Регистрация: 25.04.2014
Сообщений: 87
12.03.2015, 14:08  [ТС]
Вернулся с отпуска стал доделывать, появился вопрос вот на данный момент код программы:
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <cstdlib>
#include <iostream>
#include <vector>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <string>
#include <bitset>
#include <conio.h>
 
using namespace std;
int main()
{
//// Чтение из файла ///////////////////////////////////////////////////////////////////////////////
    vector<unsigned> F;
    unsigned FS;
    string s;
    int num;
    int colpar;
    int b;
    int q;
    int ets;
    int number;
    int countDT;
    int DTS;
    int i;
    size_t n;
    istringstream ss;
    ifstream ifs("D:\\1.txt"); 
 
    while (!ifs.eof())
    {
        getline(ifs, s);
        if ((n = s.find("68")) != string::npos)
        {
            if (s.length() - n >= 5)
            {
                if (!isxdigit(s[n + 2]) && s.substr(n + 3, 2) == "11")
                {
                    F.push_back(0x68);
                    F.push_back(0x11);
                    ss.str(s.substr(n + 5));
                    ss.clear();
                    while (!ss.eof())
                    {
                        ss >>hex>> FS;
                        ss.get();
                        F.push_back(FS);
                    }
                }
            }
        }
//// Вывод ////////////////////////////////////////////////////////////////////////////////////////////////////////////
        if (F.size() > 0)
        {
            for (int i = 0; i < F.size(); ++i)
            {
                num=i;
                cout <<setw(2)<<setfill('0') <<hex<<F[i] << " ";
                if ((i + 1) % 16 == 0) cout << endl;
            }
            cout <<"\n"<<endl;
            cout <<setfill(' ')<<"hex"<<fixed<<setw(10)<<"dec"<<fixed<<setw(20)<<"Comments";
            string a[num];
/////OSI 2/////////////////////////////////////////////////////////////////////////////////////////////////////////////           
            if (F[0]=68){
            a[0] = "Start Byte";
            } else {a[0] = "Bad Packet";}
            
            if (F[1]=11){
            a[1] = "Tel Type";
            } else {a[1] = "Bad Packet";}
            
            a[2] = "SegNum";
            a[3] = "SegNum";
            a[4] = "Reserved";
            a[5] = "Reserved";
            a[6] = "Length";
            a[7] = "Length";
            a[8] = "Length";
            a[9] = "Length";
//////OSI 3/////////////////////////////////////////////////////////////////////////////////////////////////////////////        
            if ((((F[10] >> 3) & 1) == 1)&&(((F[10] >> 4) & 1) == 0)&&(((F[10] >> 5) & 1) == 0)){
            a[10] = "1 pair Address";
            q = 2;}else if ((((F[10] >> 3) & 1) == 0)&&(((F[10] >> 4) & 1) == 1)&&(((F[10] >> 5) & 1) == 0)){
            a[10] = "2 pair Address";
            q = 4;}else if ((((F[10] >> 3) & 1) == 1)&&(((F[10] >> 4) & 1) == 1)&&(((F[10] >> 5) & 1) == 0)){
            a[10] = "3 pair Address";
            q = 6;}else if ((((F[10] >> 3) & 1) == 0)&&(((F[10] >> 4) & 1) == 0)&&(((F[10] >> 5) & 1) == 1)){
            a[10] = "4 pair Address";
            q = 8;}else if ((((F[10] >> 3) & 1) == 1)&&(((F[10] >> 4) & 1) == 0)&&(((F[10] >> 5) & 1) == 1)){
            a[10] = "5 pair Address";
            q = 10;}else if ((((F[10] >> 3) & 1) == 0)&&(((F[10] >> 4) & 1) == 1)&&(((F[10] >> 5) & 1) == 1)){
            a[10] = "6 pair Address";
            q = 12;}else if ((((F[10] >> 3) & 1) == 1)&&(((F[10] >> 4) & 1) == 1)&&(((F[10] >> 5) & 1) == 1)){
            a[10] = "7 pair Address";
            q = 14;}else {a[10] = "Bad Value";}
            
            for (int i=0; i<q; i++){
            a[11+i] = "Address Field";
            number = 11+i;
            }
/////OSI 7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////            
            for (int i=1;i<4;i++){
            a[number+i] = "Node Number";
            ets = number +i;
            }
            
            a[ets+1] = "Tels Count";
////Single Telegram Header /////////////////////////////////////////////////////////////////////////////////////////////////            
            a[ets+2] = "Length Single Telegram";
            a[ets+3] = "Function Group";
            a[ets+4] = "Direction ID";
            a[ets+5] = "Job Number";
            a[ets+6] = "DT blocks count";
////DT BLOCK///////////////////////////////////////////////////////////////////////////////////////////////////////////////            
            countDT = F[ets+7];
            DTS = ets+7;
            cout << F[ets+7];
            while(i<countDT){
                a[DTS+i] = "Length DT Block";
                a[DTS+i+1] = "DT Number";
                a[DTS+i+2] = "Type";
                a[DTS+i+3] = "Disp Principle";
                a[DTS+i+4] = "Sign Code";
                a[DTS+i+5] = "Content Byte";
                i++;
                }
           
            for (int i=0;i <F.size();i++){
            cout<<"\n"<<hex<<F[i]<<dec<<setw(11)<<F[i]<<fixed<<setw(22)<<bitset<8>(F[i])<<fixed<<setw(35)<<a[i];
            }
 
            F.clear();
            cout << endl << endl;
        }
    }
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
Проблема с тем что консоль закрывается сразу после того как прописал размерность для FOR и While добавил, что не так может быть?:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
            while(i<countDT){
                a[DTS+i] = "Length DT Block";
                a[DTS+i+1] = "DT Number";
                a[DTS+i+2] = "Type";
                a[DTS+i+3] = "Disp Principle";
                a[DTS+i+4] = "Sign Code";
                a[DTS+i+5] = "Content Byte";
                i++;
                }
           
            for (int i=0;i <F.size();i++){
            cout<<"\n"<<hex<<F[i]<<dec<<setw(11)<<F[i]<<fixed<<setw(22)<<bitset<8>(F[i])<<fixed<<setw(35)<<a[i];
            }
Что-то видимо тут не так?

Добавлено через 9 минут
О ступил с while не правильно логику построил видимо долго слишком отдыхал, надо сделать countDT количество блоков с 6 переменными, то есть например:
a[13] = "Length DT Block";
a[14] = "DT Number";
a[15] = "Type";
a[16] = "Disp Principle";
a[17] = "Sign Code";
a[18] = "Content Byte";

a[19] = "Length DT Block";
a[20] = "DT Number";
a[21] = "Type";
a[22] = "Disp Principle";
a[23] = "Sign Code";
a[24] = "Content Byte";

a[25] = "Length DT Block";
a[26] = "DT Number";
a[27] = "Type";
a[28] = "Disp Principle";
a[29] = "Sign Code";
a[30] = "Content Byte";

Эту ошибку вижу но если даже ее убрать, то всё равно консоль закрывается(((

Добавлено через 14 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
            for(int i=0;i<countDT;i++){
                a[ets+7+DTS] = "Length DT Block";
                a[ets+8+DTS] = "DT Number";
                a[ets+9+DTS] = "Type";
                a[ets+10+DTS] = "Disp Principle";
                a[ets+11+DTS] = "Sign Code";
                a[ets+12+DTS] = "Content Byte";
                DTS = ets+12;
                }
           
            for (int i=0;i <F.size();i++){
            cout<<"\n"<<hex<<F[i]<<dec<<setw(11)<<F[i]<<fixed<<setw(22)<<bitset<8>(F[i])<<fixed<<setw(35)<<a[i];
            }
Всё равно пробегает программа и закрывается консоль сразу что не так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.03.2015, 14:08

Является двоичным файлом, а не текстовым
'C:\Users\\\\\Resources\template.mdb&quot; является двоичным файлом, а не текстовым. Не знаю как решить, думал преобразовать в .txt.

CS2015 - Является двоичным файлом, а не текстовым
Здравствуйте! При компиляции программы возникла ошибка: Ошибка CS2015 'E:\Around the World\Around The World\Around The...

Конвертация потока c файлом XLS в поток c файлом XLSX
На сервер приходит поток Stream в котором содержится XLS файл. Для работы с Excel используется библиотека EPPlus, которая поддерживает...

Работа с файлом. Перевести первые буквы слов в верхний регистр
Есть программа, которая берёт написанный текст и меняет все первые буквы слов на верхний регистр, слова разделяются пробелом. Проблема в...

Программа, которая считывает 8 байт из созданного файла MyFile.dat, начиная с 7-го байта, относительно начала, и 10 байт от конца файла
Привет, вот задание собсно Напишите программу, которая считывает 8 байт из созданного ранее файла MyFile.dat, начиная с 7-го байта,...


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

Или воспользуйтесь поиском по форуму:
48
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru