static getEncodedData(correctedBits) {
			let endIndex = correctedBits.length;
			let latchTable = Table.UPPER; // table most recently latched to
			let shiftTable = Table.UPPER; // table to use for the next read
			let result = '';
			let index = 0;
			while (index < endIndex) {
				if (shiftTable === Table.BINARY) {
					if (endIndex - index < 5) {
						break;
					}
					let length = Decoder.readCode(correctedBits, index, 5);
					index += 5;
					if (length === 0) {
						if (endIndex - index < 11) {
							break;
						}
						length = Decoder.readCode(correctedBits, index, 11) + 31;
						index += 11;
					}
					for (let charCount = 0; charCount < length; charCount++) {
						if (endIndex - index < 8) {
							index = endIndex; // Force outer loop to exit
							break;
						}
						const code = Decoder.readCode(correctedBits, index, 8);
						result += /*(char)*/ StringUtils.castAsNonUtf8Char(code);
						index += 8;
					}
					// Go back to whatever mode we had been in
					shiftTable = latchTable;
				}
				else {
					let size = shiftTable === Table.DIGIT ? 4 : 5;
					if (endIndex - index < size) {
						break;
					}
					let code = Decoder.readCode(correctedBits, index, size);
					index += size;
					let str = Decoder.getCharacter(shiftTable, code);
					if (str.startsWith('CTRL_')) {
						// Table changes
						// ISO/IEC 24778:2008 prescribes ending a shift sequence in the mode from which it was invoked.
						// That's including when that mode is a shift.
						// Our test case dlusbs.png for issue #642 exercises that.
						latchTable = shiftTable; // Latch the current mode, so as to return to Upper after U/S B/S
						shiftTable = Decoder.getTable(str.charAt(5));
						if (str.charAt(6) === 'L') {
							latchTable = shiftTable;
						}
					}
					else {
						result += str;
						// Go back to whatever mode we had been in
						shiftTable = latchTable;
					}
				}
			}
			return result;
		}
Gets the string encoded in the aztec code bits

@return the decoded string