質問編集履歴

3

文章を修正しました。

2021/05/01 02:21

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -4,6 +4,18 @@
4
4
 
5
5
 
6
6
 
7
+
8
+
9
+ [これを行う目的] 
10
+
11
+ .pngデータのIDATAチャンクの実データを取り出したい。が複数存在するのでそれを一つにまとめたい。
12
+
13
+
14
+
15
+
16
+
17
+
18
+
7
19
  また提示コードの// #### コメント内部のコードでアクセスエラーは発生するのですがこれはなぜでしょうか?
8
20
 
9
21
 

2

提示コードを修正

2021/05/01 02:21

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -135,3 +135,131 @@
135
135
  }
136
136
 
137
137
  ```
138
+
139
+
140
+
141
+ ```cpp
142
+
143
+
144
+
145
+
146
+
147
+ // ###################### IDAT チャンクを表示 ######################
148
+
149
+ /*
150
+
151
+ * データのバイナリをコピーして表示
152
+
153
+ */
154
+
155
+ void ImagePrint(const char* fileName, int pos,char* copy,int copySize)
156
+
157
+ {
158
+
159
+ std::fstream fs(fileName, std::ios_base::binary | std::ios_base::in);
160
+
161
+
162
+
163
+ if (fs.is_open() == false)
164
+
165
+ {
166
+
167
+ std::cerr << "ファイルが開けません。" << std::endl;
168
+
169
+ }
170
+
171
+ else
172
+
173
+ {
174
+
175
+ //std::cout << "ファイルを開きました。" << std::endl;
176
+
177
+
178
+
179
+ size_t fileSize = fs.seekg(0, fs.end).tellg(); //ファイルサイズ
180
+
181
+ printf("fileSize: %zd\n",fileSize);
182
+
183
+ fs.seekg(0, fs.beg); //シーク位置を初期に戻す
184
+
185
+ unsigned char* fileData = new unsigned char[fileSize]; //ファイルデータ
186
+
187
+ fs.read((char*)fileData, fileSize); //バイナリ読み込み
188
+
189
+
190
+
191
+ /////////////////////////////////////////////////////////////////////////////
192
+
193
+ //BytePrint("texture.png",pos - 8, pos - 4);
194
+
195
+
196
+
197
+ int dataSize = convInt(fileData, pos - 8);
198
+
199
+
200
+
201
+
202
+
203
+ printf("dataSize: %d\n",dataSize);
204
+
205
+
206
+
207
+ int a = 0;
208
+
209
+ for (int i = pos; i < dataSize; i++)
210
+
211
+ {
212
+
213
+ std::cout<< (unsigned int)fileData[i]<<" ";
214
+
215
+
216
+
217
+ a++;
218
+
219
+ if (a == 20)
220
+
221
+ {
222
+
223
+ printf("\n");
224
+
225
+ a = 0;
226
+
227
+ }
228
+
229
+ }
230
+
231
+
232
+
233
+
234
+
235
+ ////////////////////////////////////////////////////////////////////////////
236
+
237
+
238
+
239
+
240
+
241
+
242
+
243
+
244
+
245
+
246
+
247
+
248
+
249
+ fs.seekg(0, fs.beg); //シーク位置を初期に戻す
250
+
251
+ delete fileData; //メモリ開放
252
+
253
+
254
+
255
+ }
256
+
257
+
258
+
259
+ fs.close(); //ファイルを閉じる
260
+
261
+
262
+
263
+ }
264
+
265
+ ```

1

文章を修正しました。

2021/05/01 02:01

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 文字列を連結する方法としてベターなやり方が知りたい。
1
+ バイナリを連結する方法としてベターなやり方が知りたい。
test CHANGED
@@ -1,10 +1,10 @@
1
- 提示コードですが上のコードは文字列の連結を実験したものです。下のコードは.pngファイルの実データ部を表示させる関数です。
1
+ 提示コードですが上のコードはバイナリの連結を実験したものです。下のコードは.pngファイルの実データ部を表示させる関数です。
2
2
 
3
- 下のコードで複数あるIDATチャンクの実データを一つにまとめる必要がある文字列の連結が発生すると思うのですがどのやり方がベターなののでしょか?上のコードでしょうか?
3
+ 下のコードで複数あるIDATチャンクの実データを一つにまとめる必要があるでバイナリの連結が発生すると思うのですがどのやり方がベターなののでしょか?上のコードでしょうか?
4
4
 
5
5
 
6
6
 
7
-
7
+ また提示コードの// #### コメント内部のコードでアクセスエラーは発生するのですがこれはなぜでしょうか?
8
8
 
9
9
 
10
10
 
@@ -20,125 +20,43 @@
20
20
 
21
21
 
22
22
 
23
+
24
+
23
- int main() {
25
+ unsigned char* gPictureData;
24
26
 
25
27
 
26
28
 
27
- char* str1 = new char[10]{'\0'};
29
+ void AddPictureData(const unsigned char* data)
28
30
 
31
+ {
32
+
29
- char* str2 = new char[10]{'\0'};
33
+ int size = sizeof((char*)gPictureData) + sizeof((char*)data);
30
34
 
31
35
 
32
36
 
37
+ unsigned char* str = new unsigned char[size] {0x00};
38
+
39
+
40
+
41
+
42
+
33
- char* str3 = new char[sizeof(str1) + sizeof(str2) + 1];
43
+ strcat_s((char*)str, sizeof(str), (char*)gPictureData);
34
44
 
35
45
 
36
46
 
37
- strcat_s(str3, sizeof(str3),str2);
47
+ // ########################################################
38
48
 
39
-
49
+ strcat_s((char*)str, sizeof(str), (char*)data);
40
50
 
41
- return 0;
51
+ // ########################################################
42
-
43
- }
44
-
45
- ```
46
52
 
47
53
 
48
54
 
49
- ```cpp
50
55
 
51
56
 
57
+ delete gPictureData;
52
58
 
53
- // ###################### IDAT チャンクを表示 ######################
54
-
55
- /*
56
-
57
- * データのバイナリをコピーして表示
58
-
59
- */
60
-
61
- void ImagePrint(const char* fileName, int pos,char* copy,int copySize)
62
-
63
- {
64
-
65
- std::fstream fs(fileName, std::ios_base::binary | std::ios_base::in);
66
-
67
-
68
-
69
- if (fs.is_open() == false)
70
-
71
- {
72
-
73
- std::cerr << "ファイルが開けません。" << std::endl;
74
-
75
- }
76
-
77
- else
78
-
79
- {
80
-
81
- //std::cout << "ファイルを開きました。" << std::endl;
82
-
83
-
84
-
85
- size_t fileSize = fs.seekg(0, fs.end).tellg(); //ファイルサイズ
86
-
87
- printf("fileSize: %zd\n",fileSize);
88
-
89
- fs.seekg(0, fs.beg); //シーク位置を初期に戻す
90
-
91
- unsigned char* fileData = new unsigned char[fileSize]; //ファイルデータ
92
-
93
- fs.read((char*)fileData, fileSize); //バイナリ読み込み
94
-
95
-
96
-
97
- /////////////////////////////////////////////////////////////////////////////
98
-
99
- //BytePrint("texture.png",pos - 8, pos - 4);
100
-
101
-
102
-
103
- int dataSize = convInt(fileData, pos - 8);
104
-
105
-
106
-
107
-
108
-
109
- printf("dataSize: %d\n",dataSize);
110
-
111
-
112
-
113
- int a = 0;
114
-
115
- for (int i = pos; i < dataSize; i++)
116
-
117
- {
118
-
119
- std::cout<< (unsigned int)fileData[i]<<" ";
120
-
121
-
122
-
123
- a++;
124
-
125
- if (a == 20)
126
-
127
- {
128
-
129
- printf("\n");
59
+ gPictureData = nullptr;
130
-
131
- a = 0;
132
-
133
- }
134
-
135
- }
136
-
137
-
138
-
139
-
140
-
141
- ////////////////////////////////////////////////////////////////////////////
142
60
 
143
61
 
144
62
 
@@ -150,11 +68,35 @@
150
68
 
151
69
 
152
70
 
71
+ //gPictureData = new unsigned char[size]{0x00};
72
+
73
+ //strcat_s((char*)gPictureData, sizeof(str), (char*)str);
74
+
75
+ //gPictureData[size + 1] = '\0';
76
+
77
+ }
153
78
 
154
79
 
155
- fs.seekg(0, fs.beg); //シーク位置を初期に戻す
156
80
 
81
+ int main()
82
+
83
+ {
84
+
85
+ gPictureData = new unsigned char[5]{0x00,0x00,0x00,0x00};
86
+
87
+ const unsigned char* st = new unsigned char[5]{ 0x01,0x01,0x01,0x01 };
88
+
89
+
90
+
91
+
92
+
93
+
94
+
95
+ for (int i = 0; i < sizeof(gPictureData); i++)
96
+
97
+ {
98
+
157
- delete fileData; //メモリ開放
99
+ printf("%x ", gPictureData[i]);
158
100
 
159
101
 
160
102
 
@@ -162,9 +104,33 @@
162
104
 
163
105
 
164
106
 
165
- fs.close(); //ファイルを閉じる
107
+ printf("\n\n\n");
166
108
 
167
109
 
110
+
111
+ AddPictureData(st);
112
+
113
+
114
+
115
+ for (int i = 0; i < sizeof(gPictureData); i++)
116
+
117
+ {
118
+
119
+ printf("%x ", gPictureData[i]);
120
+
121
+
122
+
123
+ }
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+ return 0;
168
134
 
169
135
  }
170
136