uniapp提供的蓝牙模块只能发送二进制数据十六进制的蓝牙打印机接收设备无法接收二进制数据如何解决他们的数据互通问题。
可以通过将二进制数据转换为十六进制字符串来解决数据互通问题。具体步骤如下:
- 将要发送的二进制数据转换为十六进制字符串:
let uint8Array = new Uint8Array([0x48, 0x65, 0x6c, 0x6c, 0x6f]); // 要发送的二进制数据
let hexString = Array.from(uint8Array, function(byte) {
return ('0' + byte.toString(16)).slice(-2);
}).join('');
console.log(hexString); // "48656c6c6f"
- 将十六进制字符串发送给蓝牙打印机:
uni.createBLEConnection({
deviceId: 'xxxxx',
success(res) {
uni.writeBLECharacteristicValue({
deviceId: 'xxxxx',
serviceId: 'xxxxx',
characteristicId: 'xxxxx',
value: hexString,
success(res) {
console.log('写入成功');
},
fail(err) {
console.log('写入失败', err);
}
});
},
fail(err) {
console.log('连接失败', err);
}
})
- 在蓝牙打印机接收数据时,将接收到的十六进制字符串转换为二进制数据:
let hexString = '48656c6c6f'; // 接收到的十六进制字符串
let uint8Array = new Uint8Array(hexString.match(/[\da-f]{2}/gi).map(function (h) {
return parseInt(h, 16)
}));
console.log(uint8Array); // Uint8Array [72, 101, 108, 108, 111]
这样就可以实现二进制数据和十六进制字符串的互通了。
原文地址: https://www.cveoy.top/t/topic/NcA 著作权归作者所有。请勿转载和采集!