【问题标题】:Writing strings and a variable to a buffer in C将字符串和变量写入C中的缓冲区
【发布时间】:2012-05-11 02:22:25
【问题描述】:

我正在使用串行端口来控制一个名为 nano 控制器的设备。我使用CreateFilewriteFilereadFile 进行通信。

这是writeFile 的语法,

if (!WriteFile(hComm, lpBuf, dwToWrite, &dwWritten, &osWrite)) {      
    if (GetLastError() != ERROR_IO_PENDING) {   
        // WriteFile failed, but isn't delayed. Report error and abort.
        fRes = FALSE;     
    }
}

这里的数据应该包含在lpBuf 中。它是一个缓冲区。

我想分配 "MINC,moveL" 。这里MINC 是文本。但是,moveL 是变量,其类型应为 double。值应随时间传递给moveLmoveL 在 0~10 000 之间变化。

那么我该如何填充缓冲区呢?

【问题讨论】:

  • 两件事:(1)向我们展示lpbuf的声明和(2)当你说moveLdouble并且你想把它写到缓冲区,你表示您要写入内部表示的sizeof(double) 字节,或者您要写入moveL 值的文本表示?

标签: c serial-port buffer communication


【解决方案1】:

听起来你想要sprintf(或其表亲之一):

char buffer[128];

sprintf(buffer, "MINC,%f", moveL);
WriteFile(hComm, buffer, ...);

【讨论】:

  • 感谢您的回复。你能建议我如何检查缓冲区的内容吗?我用过这个。
  • @Kumaa:您的意思是您想(例如)打印出缓冲区以查看其中包含的内容?如果是这样,只需像任何其他字符串一样打印出来(即,它是一个普通的 C 风格的零终止字符串)。
  • 是的,感谢您的回复。我用以下来检查内容。 printf("\nTSbuffer[5] = %lf", TSbuffer[5]);但变量的值始终为0。请建议如何检查缓冲区内容。我对C比较陌生。请帮忙。谢谢
  • @Kumaa:一旦你使用sprintf 将它放入缓冲区,缓冲区中的内容是字符串格式,而不是实际的双精度,所以只需使用printf("%s\n", buffer); 查看其内容.如果您需要以二进制格式发送双精度,则必须做一些不同的事情。
【解决方案2】:

您可以使用sprintf(lpBuf, "MINC,%lf", moveL); 创建字符串吗?

确保在填充数据之前为lpBuf 分配足够的内存。

【讨论】:

    猜你喜欢
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    • 2023-03-23
    • 2021-12-11
    • 2011-09-14
    • 1970-01-01
    相关资源
    最近更新 更多