You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中蓝牙打印机动态生成十六进制编码数据的问题

解决蓝牙打印机动态生成QR码转义序列的问题

问题核心

你尝试通过拼接"\x"+十六进制字符串的方式动态生成QR码长度字节,但这种方法无效——因为"\x"是JavaScript字符串字面量的编译时转义符,只能跟固定的十六进制数字,动态拼接的"\x"会被当成普通字符,无法解析为有效字节。

正确解决方案

直接使用String.fromCharCode()函数,将十进制的文本长度值转换为对应的ASCII字符(即打印机需要的字节),无需手动处理十六进制转换。

完整代码示例

// 示例:要生成QR码的目标文本
const qrContent = "Hello Bluetooth Printer";
// 获取文本的字节长度(若含中文、emoji等多字节字符,必须用字节数而非字符串长度)
const contentByteLength = new TextEncoder().encode(qrContent).length;

// 构建QR码打印命令
let qrCommand = "";
// 固定转义序列部分
qrCommand += "\x1b"; // 对应十进制27
qrCommand += "\x5a"; // 对应十进制90
qrCommand += "\x00"; // 对应十进制0
qrCommand += "\x02"; // 对应十进制2
qrCommand += "\x07"; // 对应十进制7
// 动态插入文本长度对应的字节
qrCommand += String.fromCharCode(contentByteLength);
qrCommand += "\x00"; // 对应十进制0
// 追加要打印的QR码文本
qrCommand += qrContent;

关键说明

  1. String.fromCharCode(n)会直接将十进制数值n转换为对应的ASCII字符,效果完全等价于字面量"\xAB"(其中AB是n的十六进制表示),能满足打印机的字节要求。
  2. 若打印机要求的长度是字节数(而非字符串字符数),必须用new TextEncoder().encode(文本).length计算,避免多字节字符导致长度统计错误。

内容的提问来源于stack exchange,提问作者Elie Asmar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 12:20:40