Arduino:将uint64_t转换为字符串

时间:2014-12-10 02:11:43

标签: c++ arduino arduino-uno

我有一个二进制文件,我能够转换为uint64_t。它很大,所以我真的需要一个uint64_t。我将它转换为char数组时遇到了麻烦。我可以在独立项目中完成,但不能在Arduino上完成

我遇到的一些障碍:

  • 我不能使用 sprintf(“%llu”):它给我0的结果 进一步的谷歌搜索显示它没有真正实施
  • 我不能使用 itoa :是的,itoa正在为较小的数字工作,但我是 处理uint64_t似乎达到了极限 给我一个负面结果
  • 我不能使用字符串(123456789):我可以将它用于其他类型,如int 很长,但我不能传递uint64_t,因为它不受支持 在参数
  • 我不能使用很长时间:搜索它只会给我一个变化 uint64_t(例如,使用sprintf)
  • 我在使用Visual Studio中的VC包时遇到问题:当我去找我的时候 项目属性>配置属性> C / C ++>一般> 附加包含Drectories 并添加路径“C:\ Program Files (x86)\ Microsoft Visual Studio 11.0 \ VC \ include \“ Visual Studio删除 它。

非常感谢任何输入。

5 个答案:

答案 0 :(得分:6)

假设你想在HEX中打印“数字”:

  uint64_t number;
  unsigned long long1 = (unsigned long)((number & 0xFFFF0000) >> 16 );
  unsigned long long2 = (unsigned long)((number & 0x0000FFFF));

  String hex = String(long1, HEX) + String(long2, HEX); // six octets

答案 1 :(得分:2)

只是添加到可能的解决方案列表中。 我使用以下函数:

char *uint64_to_string(uint64_t input)
{
    static char result[21] = "";
    // Clear result from any leftover digits from previous function call.
    memset(&result[0], 0, sizeof(result));
    // temp is used as a temporary result storage to prevent sprintf bugs.
    char temp[21] = "";
    char c;
    uint8_t base = 10;

    while (input) 
    {
        int num = input % base;
        input /= base;
        c = '0' + num;

        sprintf(temp, "%c%s", c, result);
        strcpy(result, temp);
    } 
    return result;
}

答案 2 :(得分:1)

这就像@john答案的续集。

我使用以下功能:

sealed trait MySpecialResult
object MySpecialFailure extends MySpecialResult
object MySpecialSuccess extends MySpecialResult

来源:https://github.com/markszabo/IRremoteESP8266/blob/master/src/IRutils.cpp#L48

答案 3 :(得分:0)

对于那些遇到同样问题的人:我做了一个解决方法,我只是逐个浏览数字并使它们成为一个字符。这帮助了我:How can I iterate through each digit in a 3 digit number in C?

答案 4 :(得分:0)

我为此创建了一个名为Int64String的简单库。它非常快(从1.1.0版开始),并且支持2到16之间的任何“基数”。它可以在任何接受String类型的地方使用:

// LL and ULL suffixes allow the compiler to use the right type
Serial.println(int64String((int64_t)-9223372036854775808LL)); // cast required here for some reason
Serial.println(int64String(4527492349271ULL, 16));

将输出:

-9223372036854775808
41E2392BD57

可以在库管理器或https://github.com/djGrrr/Int64String

中找到它