我正在使用GTK + 2.0 GUI在C中开发一个简单的应用程序,当然,这个应用程序旨在控制通过USB端口连接的设备,并使用FTDI驱动程序通过USB模拟RS232异步协议端口。
我正在使用函数g_io_channel_write_chars()
将数据发送到设备。问题是我发送的序列包含很多ASCII值但不匹配任何(可见)字符的值。
例如,当我发送\x40\x40\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01
时,它将无效。程序将因错误而停止。
GLib:ERROR:/build/buildd/glib2.0-2.34.1/./glib/giochannel.c:2382:g_io_channel_write_chars: code should not be reached
Przerwane (core dumped)
如果我使用sprintf
函数将此序列放入表中,则只会复制前两个值,并且此序列将被发送到设备而不会出错。
然后我的问题是,如何将任何字节发送到设备。这个有g_io_channel_write_chars()
的等价物吗?我一直在研究GIOChannel的文档,但没有找到这样的东西。非常感谢你的帮助。
答案 0 :(得分:1)
您需要确保频道不认为它正在发送文字。您遇到的崩溃可能是由于GIO试图根据其对频道编码的想法验证您的数据。
请注意,默认编码为UTF-8,并且由于并非所有字节序列都是有效的UTF-8,因此很容易导致随机二进制数据的验证失败。
使用参数NULL
调用g_io_channel_set_encoding
,这将使二进制数据安全:
编码
NULL
可以安全地与二进制数据一起使用。