0

我想将数据十六进制格式 (0x01) 或 (0xff) 发送到连接 rs232 电缆的端口。我在 VC++ 6.0 中使用 MSCOMM 控件。这是发送十六进制数据的正确方法吗?这是我的代码。

CString output;
UCHAR data1,data2;
data1=0x01;
output.Format("%x",data1);
m_mscom.SetOutput(COleVariant(output));
data2=0xff;
output.Format("%x",data2);
m_mscom.SetOutput(COleVariant(output));

如果不正确,请告诉我如何将十六进制格式的数据发送到端口。

提前致谢

4

2 回答 2

1

如果您的数据只是您想要发送的十六进制值(而不是十六进制格式的字符串),您可能需要“%c”而不是“%x”。给定(例如)0x65 的数据值,“%x”将在串行端口上产生两个字节:“6”(ascii 值 54)和“5”(ascii 值 53)。"%c" 将在串行端口上产生一个字节:'e'(ascii 值 100 或 0x65)。

至于在 C 中的串行端口上发送数据,请查看CSerialCSerialPort:它们可能会为您简化一些事情(请注意,我没有使用它们,我倾向于使用pyserial在 python 中执行串行端口应用程序模块或wxWidgetsctb库)。

编辑:另一个相当不错的(我以前用过,但是在我写原始帖子时找不到链接)是CSerialFile,它是WFC库的一部分。正如我所说,我现在倾向于使用 wxWidgets,但如果您使用的是 Microsoft 基础类,CSerialFile 确实使串行访问变得非常容易。

于 2009-06-05T07:18:20.410 回答
0

我对 MSCOM 不熟悉,但它似乎行不通。Format可以将数据重新格式化为 ASCII 字符串表示形式。

或者,您可以在 Windows 中将任何串行端口用作“文件”。查看用于打开文件的 windows api,您将看到您可以通过使用像“COM1:”这样的文件名来将某些设备作为文件寻址。

然后,您可以像文件一样读取/写入它。

于 2009-06-05T07:08:25.860 回答