gpt4 book ai didi

C#,从 USART 接收字符缓冲区中提取 double

转载 作者:行者123 更新时间:2023-11-30 15:58:16 26 4
gpt4 key购买 nike

我的 USART 正在从“黑匣子”接收一个字符串,该字符串包含两个 double 值和几个十六进制值。该字符串放置在我的缓冲区 rbuf.buf 中,总大小为 32 个字符。通常我会收到 19 个字符,但有时会在末尾收到额外的错误字符。缓冲区通常如下所示(十六进制):

0x31、0x32、0x33、0x2e、0x34、0x35、0x20、0x36、0x37、0x2e、0x38、0x39、0x20、0x37、0x41、0x41、0x20、0x0a、0x0d、0x00、 ...

我想提取两个 double 123.45 和 67.89,并尝试了以下几个其他示例:

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

...

void buffer_to_float(void)
{
static char string1[10] = "";
char *string2;
for(uint8_t i=0;i<6;i++)
{
char c = rbuf.buf[i]; // this is a char but how do I make it a pointer?
string2 = strcat ( string1, c ); // ... "char" is incompatible with "char*" ...
}

double R = atof(string2);
printf("%lf\n", R);
}

我知道我在这里做了一些愚蠢的事情,但是什么呢?我使用中断例程来接收字符串,我应该在那里进行提取还是该例程应该尽可能短/快?

谢谢你告诉我我有多傻,我想我需要它;-)

最佳答案

您可以使用 sscanf 函数读取两个 float 值:

char bla[] = {0x31, 0x32, 0x33, 0x2e,
0x34, 0x35, 0x20, 0x36,
0x37, 0x2e, 0x38, 0x39,
0x20, 0x37, 0x41, 0x41,
0x20, 0x0a, 0x0d, 0x00};

float a, b;

sscanf(bla, "%f %f", &a, &b);
printf("%f %f\n", a, b);

关于C#,从 USART 接收字符缓冲区中提取 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9880123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com