]> Skullheadx's Git Forge - qrcodescanner.git/commitdiff
Implemented bitstream to codeword conversion + padding
authorSkullheadx <admonty1@gmail.com>
Thu, 7 Nov 2024 01:50:43 +0000 (20:50 -0500)
committerSkullheadx <admonty1@gmail.com>
Thu, 7 Nov 2024 01:50:43 +0000 (20:50 -0500)
qrgenerator.cpp

index 0a840a1a75e0e253d0869389ae3e4d431b8c4119..a96c1a88b057bb779f34ae35c8f1e58035cd8a08 100644 (file)
@@ -64,15 +64,60 @@ int main() {
        for (std::size_t i{0}; i < mode_indicator.size(); ++i){
                input_data_vector.insert(input_data_vector.begin(), mode_indicator[mode_indicator.size() - i - 1]);
        }
+
+       // terminator
+       std::vector<bool> terminator{0,0,0,0};
+       for (std::size_t i{0}; i < terminator.size(); ++i){
+               input_data_vector.push_back(terminator[i]);
+       }
+       
        int k = 0;
        for (auto i : input_data_vector){
 
-               if ((k > 4 && (k-4) % 10== 0) || (k == 4)){std::cout << " ";}
+               if ((k == 4 || k == input_data_vector.size() - 4) || (k > 4 && k < input_data_vector.size() - 4 && (k-4) % 10== 0)){std::cout << " ";}
+               std::cout << i;
+               k++;
+       }
+       std::cout << std::endl;
+
+       // padding bits
+       for (std::size_t i{0}; i < input_data_vector.size() % 8; ++i){
+               input_data_vector.push_back(0);
+       }
+       
+       k = 0;
+       for (auto i : input_data_vector){
+               if (k != 0 && k % 8 == 0){std::cout << " ";}
                std::cout << i;
                k++;
        }
        std::cout << std::endl;
 
+       std::cout << "Length: " << input_data_vector.size() << std::endl;
+       std::cout << "Number of data codewords: " << input_data_vector.size() / 8 << std::endl;
+
+
+       // padding bits for codewords for V1 QR code with M-level error correction (table 8)
+       std::vector<bool> pad_codeword1 = {1,1,1,0,1,1,0,0};
+       std::vector<bool> pad_codeword2 = {0,0,0,1,0,0,0,1};
+       std::size_t code_words_to_add =16 - (input_data_vector.size() / 8); 
+       for (std::size_t i{0}; i < code_words_to_add; ++i){
+               if (i % 2 == 0){
+                       input_data_vector.insert(input_data_vector.end(), pad_codeword1.begin(), pad_codeword1.end());
+               }
+               else {
+                       input_data_vector.insert(input_data_vector.end(), pad_codeword2.begin(), pad_codeword2.end());
+               }
+       }
+
+
+       k = 0;
+       for (auto i : input_data_vector){
+               if (k != 0 && k % 8 == 0){std::cout << " ";}
+               std::cout << i;
+               k++;
+       }
+
        return 0;
 
 }