我必须向 USB 设备发送十六进制命令。
命令是:
echo -en "\x1b\x70\x00\x19\xfa" > /dev/usb/lp0
如果我把它写在终端上,它就可以工作。但是,在 C++ 中,十六进制命令存在问题。 \x00
被检测为以 null 结尾的字符串。
我试过两种方法:
std::string cmd = "echo '\\x1b\\x70\\x00\\x19\\xfa' > /dev/usb/lp0";
std::system(cmd.c_str());
没有任何反应。
和:
std::ofstream device;
device.open("/dev/usb/lp0");
device << "\x1b\x70\x00\x19\xfa";
device.close();
设备不执行任何操作。
如何解决这个问题并使用 \x00
字符串?
最佳答案
使用 write
写入固定长度字节的函数。
并且由于您正在写入二进制数据,我建议您也以二进制模式打开文件,并写入实际的整数值而不是字符串。
示例代码
std::ofstream device ("/dev/usb/lp0",std::ofstream::binary);
std::uint8_t const message[] = { 0x1b, 0x70, 0x00, 0x19, 0xfa };
if (device)
device.write(reinterpret_cast<char const*>(message), sizeof message);
关于c++ - 将\x00 写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48751312/