c++ - 将\x00 写入文件

标签 c++ hex

我必须向 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/

相关文章:

c++ - Vulkan 统一着色器数据

c++ - 如何将默认子句全局设置为无?

python - 将每个字节与 0x71 异或

c++ - 以十六进制读取文件会给出错误的输出(跳过一些十六进制值)

java - 十六进制的枚举类型使用 Java 返回错误的值?

c++ - 有什么方法可以判断 fork /执行的 Qt 应用程序的主窗口何时显示?

c++ - 从麦克风捕获声音时未执行QAudioInput::notify()

c++ - 不关心 scanf

Java将int转换为十六进制并再次转换回来

java - 从十六进制转换为字节