我有一个文件,我从中获取流媒体应用程序的时间戳。时间戳是大数字,因此我使用u64
数据类型以避免溢出。使用strtok
,我正确地从文件中找到了我需要的号码,然后使用atoll
或strtoll
将字符串转换为long long
。
当我使用格式说明符"%llu"
打印数字时,打印的内容为"%lu"
。我还将atoll
或strtoll
得到的值与预期值进行比较,它更小,我猜这表明发生了溢出。
如果数字适合u64
变量,为什么会发生溢出?例如,该数字是946688831000。
我应该注意到,我还使用long long
而不是u64
,但仍然没有。虽然它在Linux上运行,但在嵌入式平台上却没有。
以下是一些示例代码:
u64 timestamp;
char *inputTS = "946688831000";
timestamp = (u64) atoll(inputTS);
printf("Timestamp : %llu\n", timestamp);
答案 0 :(得分:1)
小型嵌入式系统的多个编译器(包括针对ARM的系统)具有标准库,不支持64位格式化。它减少了堆栈使用和代码大小。
如果您提供有关用于链接的编译器和完整命令的信息,您可能自己启用此小型库(例如,使用-lupec中的-fspecs = nano开关来自arm-none-eabi-gcc)