实际上我有一个这种类型的字符串:
"1,Hello,E025FFDA,-126.56,52.34,true"
我想使用 sscanf 解析它,将这些值存储在相应类型的变量中
uint, char[], maybe string here, ufloat ?, float, bool
我将 sscanf 与 "%[^',']"
格式说明符一起使用,并测试每个值是否正确以及在特定范围内。
这是我的代码:
- param 是指向字符串开头的指针
- temp2 临时变量
- local_ptr 是 param 的副本,不能修改 param
- RCV 是一个包含我所有参数的结构
if((get_param_length(param) != 0) && (sscanf(local_ptr, "%[^',']", &temp2) == 1))
RCV.binarypayload = temp2;
else
error = 1;
您知道存储我的值的最佳类型吗?或者有什么建议吗?
最佳答案
没有任何类型可以匹配您的ufloat
。所有浮点类型都经过签名,因此可以像这样从字符串中提取:
#include <math.h> // if you want to use fabsf()
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
int main() {
unsigned u1, u2;
char str1[20], boolstr[6];
float f1, f2;
const char *local_ptr = "1,Hello,E025FFDA,-126.56,52.34,true";
bool b;
if(sscanf(local_ptr,
" %u,%19[^,],%X,%f,%f,%5s", &u1, str1, &u2, &f1, &f2, boolstr) == 6)
{
b = strcmp(boolstr, "true") == 0;
printf("%u %s %X %f %f %d\n", u1, str1, u2, f1, f2, b);
}
}
可能的输出:
1 Hello E025FFDA -126.559998 52.340000 1
如果你想得到 f1
的绝对值,只需添加 f1 = fabsf(f1);
sscanf
之后.
关于c - 如何使用负浮点进行 sscanf ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69161021/