总之,我有一个数字,例如$ n = 90
我需要将此数字设为HEX字符,对于$ n = 90,字符串将为“\ x5a”。
到目前为止,我已经尝试过:
$n = 30;
$h = dechex($n);
$s = "\x" . $h;
但它没有被PHP正确转义-__-
重点是我正在尝试向网络ESC / POS打印机发送命令,完整代码为:
public function lineSpacing($n = 30) {
$h = dechex($n);
$this->buff("\x1b\x33\x" . $h);
}
非常感谢任何帮助^ __ ^
答案 0 :(得分:2)
好的,所以我仍然无法找到如何正确构建\ xHH但
public function lineSpacing($n = 30) {
$c = chr($n);
$this->buff("\x1b\x33" . $c);
}
为我工作。
答案 1 :(得分:1)
问题是你的字符串上的PHP解释“\ x”有文字字符,而不是转义序列......
过去6个小时我一直处理同样的问题,你的问题让我意识到了真正的问题。
假设您有一个填充了转义序列的字符串(十六进制):
$epsonCmd_OK = "\x1B\x21\x08";
上面的字符串不一样($ final):
$epsonCmd_NOTOK = "\x1b\x21\x";
$hex = "08";
$final = $epsonCmd_NOTOK . $hex;
为什么?
我们来看看!
第一个字符串 $ epsonCmd_OK 有3个字符,十六进制的 \ x1B , \ x21 和的 \ X08 即可。 (都有逃脱序列)
第二个字符串 $ epsonCmd_NOTOK 有4个字符,十六进制的 \ x1B , \ x21 加上文字字符“\”和“x” ”
因为“\ x”没有转义序列,PHP认为它有2个普通字符,没有转义序列的开头。然后当你将 $ hex 连接到字符串时,你只是在字符串中添加更多字符,因为PHP解释器已经确定“\ x”是字符,而不是转义序列的开始。
在这种特定情况下,最好的方法是使用 PHP chr()函数(只有@ leumas95说明):
$epsonCmd_NOTOK = "\x1b\x21"; // no "\x" needed here
$dec = 8;
$final = $epsonCmd_NOTOK . chr($dec); // now $final is equivalent to $epsonCmd_OK
答案 2 :(得分:0)
$n = 30;
$h = dechex($n);
$s = "\\x" . $h;