1

我正在用 GTK+2.0 GUI 用 C 语言开发一个简单的应用程序,当然,在 Linux 上,这个应用程序旨在控制通过 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 的文档,但没有找到类似的东西。非常感谢您的帮助。

4

1 回答 1

1

您需要确保频道不认为它正在发送文本。您遇到的崩溃可能是由于 GIO 试图根据其通道编码的想法来验证您的数据。

请注意,默认编码是 UTF-8,并且由于并非所有字节序列都是有效的 UTF-8,这很容易导致对随机二进制数据的验证失败。

g_io_channel_set_encoding使用参数调用,NULL这将使二进制数据安全:

编码NULL可以安全地用于二进制数据。

于 2013-05-22T10:17:53.883 回答