c++ - 使用读取文件功能解码串行 GPS 时遇到问题

标签 c++

我正在尝试使用 readfile 函数读取 C++ 中的串口。我设法打开并读取 C++ 中的串口。我现在面临的问题是从串口读取数据后的解码。以下是我的代码。当我运行我的代码时,我的解码循环无法检测到 ((*&szChar == '$')),它通过打印错误退出循环。我可以知道如何解码从串行端口读取的 gps 数据吗?谢谢

char szChar[100];
int nRet;
DWORD  dwBytesRead = 10;
char   ReadBuffer[BUFFERSIZE] = {0};
nRet = ReadFile(hCom,&szChar,BUFFERSIZE-1,&dwBytesRead,NULL);
if((*&szChar == '$'))
{
    printf("%s\n", &szChar);
}
else
{
    printf("error\n");

最佳答案

我不得不说,我发现您的代码相当令人困惑。例如,您将 szChar 创建为 100 个 char 的数组,将 ReadBuffer 创建为 BUFFERSIZE 的数组> 字符。但是,当您调用 ReadFile 时,您将传递大小为 BUFFERSIZE 的 szChar 的基址。除非出于某种巧合,BUFFERSIZE 恰好等于 100,否则这看起来很像潜在的缓冲区溢出。

然后我们到达*&szChar。这也没有多大意义。从外观上看,您可能需要 szChar[0] —— 但即便如此,这也不是一个好主意,因为您可能无法以精确的行大小的片段接收数据。因此,您可能想要扫描数据以找到“$”。

int Ret;
DWORD  BytesRead;
char   ReadBuffer[BUFFERSIZE] = {0};
Ret = ReadFile(hCom,ReadBuffer,sizeof(ReadBuffer)-1,&BytesRead,NULL);

ReadBuffer[BytesRead] = '\0';

if (ReadBuffer[0] == '$')
    printf(%s\n", ReadBuffer);
else
    printf("error\n");

关于c++ - 使用读取文件功能解码串行 GPS 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4181871/

相关文章:

c++ - Arduino IDE编译器错误多个定义

itoa() 的 C++ 标准替代方法,用于将 int 转换为 base 10 char*

c++ - 我可以在记录错误时让 DirectX(任何版本)回调吗?

C++ 从 CreateProcess() 获取 UTF-8 输出

c++ - 想要在 c/c++ 中以编程方式在某些文本编辑器中打开文本文件

c++ - 构建解决方案时使 Visual Studio 的 CMake 工具运行 INSTALL

c++ - 是否可以预测 srand(time(0)) 的随机数?

c++ - Qt 应用程序从 QtCreator 启动时会找到库,但不能从命令行启动

c++ - 并行前缀和 - 最快的实现

c# - 用多个 C# .dll 包装多个 C++ .dll