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
   | #include <iostream>
#include <array>
 
std::array<unsigned, 4> encode(std::array<unsigned, 3> const & octets)
{
    return {
        (octets[0] & 0xFC) >> 2,
        ((octets[0] & 0x03) << 4) + ((octets[1] & 0xF0) >> 4),
        ((octets[1] & 0x0F) << 2) + ((octets[2] & 0xC0) >> 6),
        octets[2] & 0x3F
    };
}
 
std::array<unsigned, 3> decode(std::array<unsigned, 4> const & indexes)
{
    return {
        ((indexes[0] << 2) & 0xFC) + ((indexes[1] >> 4) & 0x03),
        ((indexes[1] << 4) & 0xF0) + ((indexes[2] >> 2) & 0x0F),
        ((indexes[2] << 6) & 0xC0) + (indexes[3] & 0x3F)
    };
}
 
int main() {
    for (unsigned i1 = 0; i1 < 0b111111; ++i1) {
        for (unsigned i2 = 0; i2 < 0b111111; ++i2) {
            for (unsigned i3 = 0; i3 < 0b111111; ++i3) {
                std::array<unsigned, 3> const arr{{i1,i2,i3}};
                if (arr != decode(encode(arr))) {
                    std::cerr << "noop\n";
                    return 1;
                }
            }
        }
    }
    std::cout << "ok\n";
    return 0;
} | 
Partager