Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
src_corelib_text_qbytearray.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
4#include <QByteArray>
5#include <QDataStream>
6#include <QIODevice>
7#include <iostream>
8
9using namespace std;
10
12{
13 {
14 //! [0]
15 QByteArray ba("Hello");
16 //! [0]
17 }
18
19 {
20 //! [1]
21 QByteArray ba;
22 ba.resize(5);
23 ba[0] = 0x3c;
24 ba[1] = 0xb8;
25 ba[2] = 0x64;
26 ba[3] = 0x18;
27 ba[4] = 0xca;
28 //! [1]
29 }
30
31 {
32 QByteArray ba("");
33
34 //! [2]
35 for (qsizetype i = 0; i < ba.size(); ++i) {
36 if (ba.at(i) >= 'a' && ba.at(i) <= 'f')
37 cout << "Found character in range [a-f]" << endl;
38 }
39 //! [2]
40 }
41
42 {
43 //! [3]
44 QByteArray x("and");
45 x.prepend("rock "); // x == "rock and"
46 x.append(" roll"); // x == "rock and roll"
47 x.replace(5, 3, "&"); // x == "rock & roll"
48 //! [3]
49 }
50
51 {
52 //! [4]
53 QByteArray ba("We must be <b>bold</b>, very <b>bold</b>");
54 qsizetype j = 0;
55 while ((j = ba.indexOf("<b>", j)) != -1) {
56 cout << "Found <b> tag at index position " << j << endl;
57 ++j;
58 }
59 //! [4]
60 }
61
62 {
63 //! [5]
64 QByteArray().isNull(); // returns true
65 QByteArray().isEmpty(); // returns true
66
67 QByteArray("").isNull(); // returns false
68 QByteArray("").isEmpty(); // returns true
69
70 QByteArray("abc").isNull(); // returns false
71 QByteArray("abc").isEmpty(); // returns false
72 //! [5]
73 }
74
75 {
76 //! [6]
77 QByteArray ba("Hello");
78 qsizetype n = ba.size(); // n == 5
79 ba.data()[0]; // returns 'H'
80 ba.data()[4]; // returns 'o'
81 ba.data()[5]; // returns '\0'
82 //! [6]
83 }
84
85 {
86 //! [7]
87 QByteArray().isEmpty(); // returns true
88 QByteArray("").isEmpty(); // returns true
89 QByteArray("abc").isEmpty(); // returns false
90 //! [7]
91 }
92
93 {
94 //! [8]
95 QByteArray ba("Hello world");
96 char *data = ba.data();
97 while (*data) {
98 cout << "[" << *data << "]" << endl;
99 ++data;
100 }
101 //! [8]
102 }
103
104 {
105 //! [9]
106 QByteArray ba("Hello, world");
107 cout << ba[0]; // prints H
108 ba[7] = 'W';
109 // ba == "Hello, World"
110 //! [9]
111 }
112
113 {
114 //! [10]
115 QByteArray ba("Stockholm");
116 ba.truncate(5); // ba == "Stock"
117 //! [10]
118 }
119
120 {
121 //! [11]
122 QByteArray ba("STARTTLS\r\n");
123 ba.chop(2); // ba == "STARTTLS"
124 //! [11]
125 }
126
127 {
128 //! [12]
129 QByteArray x("free");
130 QByteArray y("dom");
131 x += y;
132 // x == "freedom"
133 //! [12]
134 }
135
136 {
137 //! [13]
138 QByteArray().isNull(); // returns true
139 QByteArray("").isNull(); // returns false
140 QByteArray("abc").isNull(); // returns false
141 //! [13]
142 }
143
144 {
145 //! [fill]
146 QByteArray ba("Istambul");
147 ba.fill('o');
148 // ba == "oooooooo"
149 //! [fill]
150 }
151 {
152 //! [14]
153 QByteArray ba("Istambul");
154 ba.fill('X', 2);
155 // ba == "XX"
156 //! [14]
157 }
158
159 {
160 //! [15]
161 QByteArray x("ship");
162 QByteArray y("air");
163 x.prepend(y);
164 // x == "airship"
165 //! [15]
166 }
167
168 {
169 //! [16]
170 QByteArray x("free");
171 QByteArray y("dom");
172 x.append(y);
173 // x == "freedom"
174 //! [16]
175 }
176
177 {
178 //! [17]
179 QByteArray ba("Meal");
180 ba.insert(1, QByteArrayView("ontr"));
181 // ba == "Montreal"
182 //! [17]
183 }
184
185 {
186 //! [18]
187 QByteArray ba("Montreal");
188 ba.remove(1, 4);
189 // ba == "Meal"
190 //! [18]
191 }
192
193 {
194 //! [19]
195 QByteArray x("Say yes!");
196 QByteArray y("no");
197 x.replace(4, 3, y);
198 // x == "Say no!"
199 //! [19]
200 }
201
202 {
203 //! [20]
204 QByteArray ba("colour behaviour flavour neighbour");
205 ba.replace(QByteArray("ou"), QByteArray("o"));
206 // ba == "color behavior flavor neighbor"
207 //! [20]
208 }
209
210 {
211 //! [21]
212 QByteArray x("sticky question");
213 QByteArrayView y("sti");
214 x.indexOf(y); // returns 0
215 x.indexOf(y, 1); // returns 10
216 x.indexOf(y, 10); // returns 10
217 x.indexOf(y, 11); // returns -1
218 //! [21]
219 }
220
221 {
222 //! [22]
223 QByteArray ba("ABCBA");
224 ba.indexOf("B"); // returns 1
225 ba.indexOf("B", 1); // returns 1
226 ba.indexOf("B", 2); // returns 3
227 ba.indexOf("X"); // returns -1
228 //! [22]
229 }
230
231 {
232 //! [23]
233 QByteArray x("crazy azimuths");
234 QByteArrayView y("az");
235 x.lastIndexOf(y); // returns 6
236 x.lastIndexOf(y, 6); // returns 6
237 x.lastIndexOf(y, 5); // returns 2
238 x.lastIndexOf(y, 1); // returns -1
239 //! [23]
240 }
241
242 {
243 //! [24]
244 QByteArray ba("ABCBA");
245 ba.lastIndexOf("B"); // returns 3
246 ba.lastIndexOf("B", 3); // returns 3
247 ba.lastIndexOf("B", 2); // returns 1
248 ba.lastIndexOf("X"); // returns -1
249 //! [24]
250 }
251
252 {
253 //! [25]
254 QByteArray url("ftp://ftp.qt-project.org/");
255 if (url.startsWith("ftp:"))
256 {/*...*/}
257 //! [25]
258 }
259
260 {
261 //! [26]
262 QByteArray url("http://qt-project.org/doc/qt-5.0/qtdoc/index.html");
263 if (url.endsWith(".html"))
264 {/*...*/}
265 //! [26]
266 }
267
268 {
269 //! [27]
270 QByteArray x("Pineapple");
271 QByteArray y = x.first(4);
272 // y == "Pine"
273 //! [27]
274 }
275
276 {
277 //! [28]
278 QByteArray x("Pineapple");
279 QByteArray y = x.last(5);
280 // y == "apple"
281 //! [28]
282 }
283
284 {
285 //! [29]
286 QByteArray x("Five pineapples");
287 QByteArray y = x.sliced(5, 4); // y == "pine"
288 QByteArray z = x.sliced(5); // z == "pineapples"
289 //! [29]
290 }
291
292 {
293 //! [30]
294 QByteArray x("Qt by THE QT COMPANY");
295 QByteArray y = x.toLower();
296 // y == "qt by the qt company"
297 //! [30]
298 }
299
300 {
301 //! [31]
302 QByteArray x("Qt by THE QT COMPANY");
303 QByteArray y = x.toUpper();
304 // y == "QT BY THE QT COMPANY"
305 //! [31]
306 }
307
308 {
309 //! [32]
310 QByteArray ba(" lots\t of\nwhitespace\r\n ");
311 ba = ba.simplified();
312 // ba == "lots of whitespace";
313 //! [32]
314 }
315
316 {
317 //! [33]
318 QByteArray ba(" lots\t of\nwhitespace\r\n ");
319 ba = ba.trimmed();
320 // ba == "lots\t of\nwhitespace";
321 //! [33]
322 }
323
324 {
325 //! [34]
326 QByteArray x("apple");
327 QByteArray y = x.leftJustified(8, '.'); // y == "apple..."
328 //! [34]
329 }
330
331 {
332 //! [35]
333 QByteArray x("apple");
334 QByteArray y = x.rightJustified(8, '.'); // y == "...apple"
335 //! [35]
336 }
337
338 {
339 //! [36]
340 QByteArray str("FF");
341 bool ok;
342 int hex = str.toInt(&ok, 16); // hex == 255, ok == true
343 int dec = str.toInt(&ok, 10); // dec == 0, ok == false
344 //! [36]
345 }
346
347 {
348 //! [37]
349 QByteArray str("FF");
350 bool ok;
351 long hex = str.toLong(&ok, 16); // hex == 255, ok == true
352 long dec = str.toLong(&ok, 10); // dec == 0, ok == false
353 //! [37]
354 }
355
356 {
357 //! [38]
358 QByteArray string("1234.56");
359 bool ok;
360 double a = string.toDouble(&ok); // a == 1234.56, ok == true
361
362 string = "1234.56 Volt";
363 a = string.toDouble(&ok); // a == 0, ok == false
364 //! [38]
365 }
366
367 {
368 //! [38float]
369 QByteArray string("1234.56");
370 bool ok;
371 float a = string.toFloat(&ok); // a == 1234.56, ok == true
372
373 string = "1234.56 Volt";
374 a = string.toFloat(&ok); // a == 0, ok == false
375 //! [38float]
376 }
377
378 {
379 //! [39]
380 QByteArray text("Qt is great!");
381 text.toBase64(); // returns "UXQgaXMgZ3JlYXQh"
382
383 QByteArray hello("<p>Hello?</p>");
384 hello.toBase64(QByteArray::Base64Encoding | QByteArray::OmitTrailingEquals); // returns "PHA+SGVsbG8/PC9wPg"
385 hello.toBase64(QByteArray::Base64Encoding); // returns "PHA+SGVsbG8/PC9wPg=="
386 hello.toBase64(QByteArray::Base64UrlEncoding); // returns "PHA-SGVsbG8_PC9wPg=="
387 hello.toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals); // returns "PHA-SGVsbG8_PC9wPg"
388 //! [39]
389 }
390
391 {
392 //! [40]
393 QByteArray ba;
394 int n = 63;
395 ba.setNum(n); // ba == "63"
396 ba.setNum(n, 16); // ba == "3f"
397 //! [40]
398 }
399
400 {
401 //! [41]
402 int n = 63;
403 QByteArray::number(n); // returns "63"
404 QByteArray::number(n, 16); // returns "3f"
405 QByteArray::number(n, 16).toUpper(); // returns "3F"
406 //! [41]
407 }
408
409 {
410 //! [42]
411 QByteArray ba = QByteArray::number(12.3456, 'E', 3);
412 // ba == 1.235E+01
413 //! [42]
414 }
415
416 {
417 //! [43]
418 static const char mydata[] = {
419 '\x00', '\x00', '\x03', '\x84', '\x78', '\x9c', '\x3b', '\x76',
420 '\xec', '\x18', '\xc3', '\x31', '\x0a', '\xf1', '\xcc', '\x99',
421 //...
422 '\x6d', '\x5b'
423 };
424
425 QByteArray data = QByteArray::fromRawData(mydata, sizeof(mydata));
426 QDataStream in(&data, QIODevice::ReadOnly);
427 //...
428 //! [43]
429 }
430
431 {
432 //! [44]
433 QByteArray text = QByteArray::fromBase64("UXQgaXMgZ3JlYXQh");
434 text.data(); // returns "Qt is great!"
435
436 QByteArray::fromBase64("PHA+SGVsbG8/PC9wPg==", QByteArray::Base64Encoding); // returns "<p>Hello?</p>"
437 QByteArray::fromBase64("PHA-SGVsbG8_PC9wPg==", QByteArray::Base64UrlEncoding); // returns "<p>Hello?</p>"
438 //! [44]
439 }
440
441 QByteArray encodedData;
442
443 {
444 //! [44ter]
445 void process(const QByteArray &);
446
447 if (auto result = QByteArray::fromBase64Encoding(encodedData))
448 process(*result);
449 //! [44ter]
450
451 //! [44quater]
452 auto result = QByteArray::fromBase64Encoding(encodedData);
453 if (result.decodingStatus == QByteArray::Base64DecodingStatus::Ok)
454 process(result.decoded);
455 //! [44quater]
456 }
457
458 {
459 //! [45]
460 QByteArray text = QByteArray::fromHex("517420697320677265617421");
461 text.data(); // returns "Qt is great!"
462 //! [45]
463 }
464
465 {
466 //! [46]
467 QString tmp = "test";
468 QByteArray text = tmp.toLocal8Bit();
469 char *data = new char[text.size()];
470 strcpy(data, text.data());
471 delete [] data;
472 //! [46]
473 }
474
475 {
476 //! [47]
477 QString tmp = "test";
478 QByteArray text = tmp.toLocal8Bit();
479 char *data = new char[text.size() + 1];
480 strcpy(data, text.data());
481 delete [] data;
482 //! [47]
483 }
484
485 {
486 //! [48]
487 QByteArray ba1("ca\0r\0t");
488 ba1.size(); // Returns 2.
489 ba1.constData(); // Returns "ca" with terminating \0.
490
491 QByteArray ba2("ca\0r\0t", 3);
492 ba2.size(); // Returns 3.
493 ba2.constData(); // Returns "ca\0" with terminating \0.
494
495 QByteArray ba3("ca\0r\0t", 4);
496 ba3.size(); // Returns 4.
497 ba3.constData(); // Returns "ca\0r" with terminating \0.
498
499 const char cart[] = {'c', 'a', '\0', 'r', '\0', 't'};
500 QByteArray ba4(QByteArray::fromRawData(cart, 6));
501 ba4.size(); // Returns 6.
502 ba4.constData(); // Returns "ca\0r\0t" without terminating \0.
503 //! [48]
504 }
505
506 {
507 //! [49]
508 QByteArray ba("ab");
509 ba.repeated(4); // returns "abababab"
510 //! [49]
511 }
512
513 {
514 //! [50]
515 QByteArray macAddress = QByteArray::fromHex("123456abcdef");
516 macAddress.toHex(':'); // returns "12:34:56:ab:cd:ef"
517 macAddress.toHex(0); // returns "123456abcdef"
518 //! [50]
519 }
520
521 {
522 //! [51]
523 QByteArray text = QByteArray::fromPercentEncoding("Qt%20is%20great%33");
524 qDebug("%s", text.data()); // reports "Qt is great!"
525 //! [51]
526 }
527
528 {
529 //! [52]
530 QByteArray text = "{a fishy string?}";
531 QByteArray ba = text.toPercentEncoding("{}", "s");
532 qDebug("%s", ba.constData());
533 // prints "{a fi%73hy %73tring%3F}"
534 //! [52]
535 }
536
537 {
538 //! [53]
539 QByteArray ba = QByteArrayLiteral("byte array contents");
540 //! [53]
541 }
542
543 {
544 //! [54]
545 QByteArray encoded("Qt%20is%20great%33");
546 QByteArray decoded = encoded.percentDecoded(); // Set to "Qt is great!"
547 //! [54]
548 }
549
550 using namespace Qt::StringLiterals;
551
552 {
553 //! [57]
554 QByteArray x = "Five pineapples"_ba;
555 x.slice(5); // x == "pineapples"
556 x.slice(4, 3); // x == "app"
557 //! [57]
558 }
559
560}
561
562# ifdef EMSCRIPTEN
563#include <emscripten/val.h>
564void emscripten_examples()
565{
566 {
567 //! [55]
568 emscripten::val uint8array = emscripten::val::global("g_uint8array");
569 QByteArray byteArray = QByteArray::fromEcmaUint8Array(uint8array);
570 //! [55]
571 }
572 {
573 //! [56]
574 QByteArray byteArray = "test";
575 emscripten::val uint8array = byteArray.toEcmaUint8Array();
576 //! [56]
577 }
578}
579# endif
void process(const QChar &ch)
void wrapInFunction()
[16]