반응형
https://www.rfc-editor.org/rfc/rfc7049
https://libcbor.readthedocs.io/en/v0.8.0/getting_started.html
json compact version
reduce the size a lot
install on ubuntu 18.04 -> sudo apt-get install -y libcbor-dev
Appendix C. Pseudocode
The well-formedness of a CBOR item can be checked by the pseudocode
in Figure 1. The data is well-formed if and only if:
o the pseudocode does not "fail";
o after execution of the pseudocode, no bytes are left in the input
(except in streaming applications)
The pseudocode has the following prerequisites:
o take(n) reads n bytes from the input data and returns them as a
byte string. If n bytes are no longer available, take(n) fails.
o uint() converts a byte string into an unsigned integer by
interpreting the byte string in network byte order.
o Arithmetic works as in C.
o All variables are unsigned integers of sufficient range.
well_formed (breakable = false) {
// process initial bytes
ib = uint(take(1));
mt = ib >> 5;
val = ai = ib & 0x1f;
switch (ai) {
case 24: val = uint(take(1)); break;
case 25: val = uint(take(2)); break;
case 26: val = uint(take(4)); break;
case 27: val = uint(take(8)); break;
case 28: case 29: case 30: fail();
case 31:
return well_formed_indefinite(mt, breakable);
}
// process content
switch (mt) {
// case 0, 1, 7 do not have content; just use val
case 2: case 3: take(val); break; // bytes/UTF-8
case 4: for (i = 0; i < val; i++) well_formed(); break;
case 5: for (i = 0; i < val*2; i++) well_formed(); break;
case 6: well_formed(); break; // 1 embedded data item
}
return mt; // finite data item
}
well_formed_indefinite(mt, breakable) {
switch (mt) {
case 2: case 3:
while ((it = well_formed(true)) != -1)
if (it != mt) // need finite embedded
fail(); // of same type
break;
case 4: while (well_formed(true) != -1); break;
case 5: while (well_formed(true) != -1) well_formed(); break;
case 7:
if (breakable)
return -1; // signal break out
else fail(); // no enclosing indefinite
default: fail(); // wrong mt
}
return 0; // no break out
}
Figure 1: Pseudocode for Well-Formedness Check
Note that the remaining complexity of a complete CBOR decoder is
about presenting data that has been parsed to the application in an
appropriate form.
반응형
'etc' 카테고리의 다른 글
jvm setting flag 의미 (0) | 2023.03.09 |
---|---|
CAmkES / RISC-V/ ARM (0) | 2022.12.28 |
eng study (0) | 2022.12.24 |
영어 email 끝맫음 표현 (0) | 2022.11.07 |
timeseries DB (0) | 2022.10.13 |