我的USART从“黑匣子”接收一个字符串,该字符串包含两个双精度值和十六进制值。该字符串放在缓冲区rbuf.buf中,总大小为32个字符。通常我会收到19个字符,但最后几次会出现额外的错误字符。缓冲区通常如下所示(以十六进制表示):C#,从USART中提取两倍接收字符缓冲区
0x31 0x32 0x33 0x2e 0x34 0x35 0x20 0x36 0x37 0x2e 0x38 0x43 0x37 0x41 0x41 0x20 0x0a ,0X0D,0×00,...
我想提取两个双打中其它一些实例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);
}
我知道b。我在这里做一些傻事b呃什么? 我使用中断程序来接收字符串,我应该在那里进行提取还是应该尽可能短/快?
谢谢你告诉我,我怎么这么傻我,我想我需要它;-)
你真的,真的不应该在中断函数中执行任何格式化/转换/浮点“填充”。你有权尽可能缩短这部分。 – 2012-03-27 13:18:32