重所周不知,如果你使用以下代码打印int64
int64_t data64 = 5; printf("%lld", data64); 你只能得到一条闪瞎眼的打印信息“ld”, 为什么是这样的结果呢? 因为在编译时默认使用的是newlib-nano库,这个库是经过精简的,为了占用更少的内存和flash。那么如果我们确实需要打印int64/uint64,有什么办法呢?下面介绍两种方法: 1. 添加一个接口,将int64/uint64转为字符串再打印 char *ui64toa(uint64 value, char *string, int radix)
{
char buf[68];
int8 len = 0;
int8 pos = 0; if (radix < 2 || radix > 36)
string[pos] = 0;
else if (!value) {
string[pos++] = '0';
string[pos] = 0;
} else {
while (value) {
buf[len++] = value % radix;
value /= radix;
}
while (len) {
int ch = buf[--len];
ch += '0';
if (ch > '9')
ch += 7 + 'a' - 'A';
string[pos++] = ch;
}
string[pos] = 0;
} return string;
} 使用方式: uint64_t UVeryLongValue = 0x1FFFFFFFFFFFFFFF; static char UARTBuffer[32];
static char ConversionBuffer[68];
ui64toa(UVeryLongValue, ConversionBuffer, 10);
sprintf(UARTBuffer,"uint64: %s", ConversionBuffer); printf("%s\r\n",UARTBuffer); 2. 不使用newlib-nano库,支持%lld和%llu 将 recipe-make-cat1a库中的下面这句话注释掉 注释掉以后就可以欢快的使用%lld和%llu进行打印了。但是这里有一点需要注意的是,如果不适用newlib-nano, 编译出来的image会大个几十K 所以如果仅仅为了支持打印int64/uint64的话,比较建议使用第一种方法。
|