c - 如何使用负浮点进行 sscanf ?

标签 c string parsing scanf

实际上我有一个这种类型的字符串:

"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/

相关文章:

javascript - Web Worker 使用 Web Assembly 时出错

mysql - 在 where 子句 mysql 查询中使用子字符串的正确方法

java - 将文件的文本作为字符串返回?

.net - Linq 的聚合函数,如何制作 CSV 字符串

Latex - 提取子字符串/忽略字符

c - 在另一个文件中定义的函数是否需要 extern?

c - 这个功能有什么问题?

c - C 中 char 数组的 if 语句

javascript - 我如何使用 Javascript 解析 JSON

java - 如何编写用于算术计算java解析器的递归while循环