var stringConverter = { convertByte: function (oneByte, bytesPerPixel) { var stringByte = '0x' + oneByte.toString(16).padStart(bytesPerPixel * 2, '0'); return stringByte; }, convert: function (dataLength, bytesPerPixel, multiLine, colNumber, data) { var resultString = ''; for (var i = 0; i < dataLength; i++) { var stringByte = ''; // need to use bigint, so we can use 32bit integers (4byte per pixel) let combinedByte = BigInt("0b00000000000000000000000000000000"); for (let j = 0; j < bytesPerPixel; j++) { let pixelByte = BigInt(data[(i * bytesPerPixel) + j]); if (j != 0) { combinedByte = combinedByte << BigInt(8); } combinedByte = combinedByte | pixelByte; } stringByte = this.convertByte(combinedByte, bytesPerPixel) + ', '; if (multiLine && ((i + 1) % colNumber == 0)) { stringByte += '\n '; } resultString += stringByte; } resultString = resultString.substr(0, resultString.lastIndexOf(',')).trim(); // add the array definition return resultString; } }; module.exports = { toString : function(data, colNum) { console.log('Converting data to string'); var dataLength = data.byteLength; console.log('actualDataLength: ' + dataLength); var resultString = '#define SETUP_HTML_SIZE '; resultString += dataLength + '\n' resultString += 'const char SETUP_HTML[] PROGMEM = {\n '; resultString += stringConverter.convert(dataLength, 1, true, 16, data); resultString += '\n};'; return resultString; } }