【问题标题】:Convert double value to uint_8 type array将双精度值转换为 uint_8 类型数组
【发布时间】:2016-09-13 13:39:03
【问题描述】:

我是 C 开发的新手。如何将 I double 值转换为 uint_8 类型数组。

double test=1234.642462

我想另存为

uint8_t data[] = {'1','2','3','4','.','6','4','2','4','6','2'};

感谢任何帮助。谢谢。

【问题讨论】:

  • 使用snprintf
  • 将其转换为字符串,然后将字符串转换为uint8_t
  • sprintf(data, "%f", test);
  • 你想要一个 C 字符串还是数组?
  • 您希望结果为int8_t 还是uint8_t?因为你的问题提到了两者。

标签: c string floating-point


【解决方案1】:

您可以像这样使用snprintf 函数:

#include <stdlib.h>    

int8_t data[20];
double test=1234.642462;

snprintf(data, 20, "%f", test);

应将 20 个字符的限制调整为所需的精度,因为浮点数可能很长。

【讨论】:

    【解决方案2】:

    DBL_MAX 通常约为 179769...(303 more digits).0。通常只有前 17 个被认为是重要的。

    DBL_MIN 通常大约是 0.000(303 more zeros)222507... 而且通常只有前 17 个被认为是重要的。

    要将double 的整个范围转换为显示有效数字的非指数十进制字符串可能需要数百个字节 - 这不是一种实用的方法。

    要将double 转换为十进制文本表示,存储在charuint8_tint8_t 等中,最好使用 exponential 表示法,但不够有效数字过多。将*printf() 家庭与e 一起使用。

    #include <float.h>
    //                     -   d   .       dddd                e   -  expo \0
    #define DBL_TEXT_SIZE (1 + 1 + 1 + (DBL_DECIMAL_DIG - 1) + 1 + 1 + 6 + 1)
    ...
    uint8_t data[DBL_TEXT_SIZE];
    sprintf(data, "%.e", DBL_DECIMAL_DIG - 1, test);
    

    更多详情:见Printf width specifier to maintain precision of floating-point value

    【讨论】:

      猜你喜欢
      • 2017-02-24
      • 2011-07-07
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2012-06-11
      相关资源
      最近更新 更多