From 9c9ed167895ec74d3bc95507da6a170ba6d70a8c Mon Sep 17 00:00:00 2001 From: Skullheadx Date: Wed, 6 Nov 2024 20:50:43 -0500 Subject: [PATCH] Implemented bitstream to codeword conversion + padding --- qrgenerator.cpp | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/qrgenerator.cpp b/qrgenerator.cpp index 0a840a1..a96c1a8 100644 --- a/qrgenerator.cpp +++ b/qrgenerator.cpp @@ -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 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 pad_codeword1 = {1,1,1,0,1,1,0,0}; + std::vector 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; } -- 2.54.0