今天,我遇到了ARM工具链EABI(交叉编译器)的一些奇怪问题。
问题是当我尝试使用snwprintf()将浮点值转换为字符串时,我得到了一些没有实际浮点值的垃圾字符串。
像这样的代码looke:float floatValue = 1.0;
snwprintf (buffer, bufferSize, _T("%g"), floatValue);
然后我调试了snwprintf,我发现变量参数列表(va_arg)没有指向精确的数据值。通过转储内存,我们能够找到变量参数列表中存在的确切数据。 va_arg应该指出的数据是不同的。
我不认为这是一个endianess问题,因为整合值工作正常。问题只有双值。
有谁可以帮我解决这个问题?
答案 0 :(得分:1)
你应该将它格式化/打印为double,因为浮点数被加宽为可变函数的双倍。
以下
中的ARM体系结构调用标准5.5参数传递
对于基本标准,可变参数函数总是被编组。7.2论证传递约定
对于可变参数函数,与省略号(...)匹配的浮点参数将转换为double类型。
Afaik 7.2一般适用于C.