小程序连接蓝牙打印机,输出结果是指令串
后端传输给前端打印指令串(CPCL指令集) 前端处理后将数据传递给打印机,发现打印机直接将指令识别为打印内容输出了 例如下面一段伪代码 执行后结果直接打印"[代码]! 0 200 200 210 1 T 4 0 30 40 Hello World PRINT[代码]" [代码]let printData = string2buffer([代码][代码]"! 0 200 200 210 1 T 4 0 30 40 Hello World PRINT"[代码][代码]);[代码] [代码]printTemplate(deviceId, serviceId, characteristicId, printData);[代码] [代码]string2buffer: [代码][代码]function[代码] [代码](str) {[代码][代码] [代码][代码]// 首先将字符串转为16进制[代码][代码] [代码][代码]let val = [代码][代码]""[代码][代码] [代码][代码]for[代码] [代码](let i = 0; i < str.length; i++) {[代码][代码] [代码][代码]if[代码] [代码](val === [代码][代码]''[代码][代码]) {[代码][代码] [代码][代码]val = str.charCodeAt(i).toString(16)[代码][代码] [代码][代码]} [代码][代码]else[代码] [代码]{[代码][代码] [代码][代码]val += [代码][代码]','[代码] [代码]+ str.charCodeAt(i).toString(16)[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}[代码][代码] [代码][代码]// 将16进制转化为ArrayBuffer[代码][代码] [代码][代码]return[代码] [代码]new[代码] [代码]Uint8Array(val.match(/[\da-f]{2}/gi).map([代码][代码]function[代码] [代码](h) {[代码][代码] [代码][代码]return[代码] [代码]parseInt(h, 16)[代码][代码] [代码][代码]})).buffer[代码][代码] [代码][代码]}[代码]CPCL指令示例:[图片]