打印
[PSoC™]

在ModusToolbox中如何打印int64/uint64

[复制链接]
914|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
重所周不知,如果你使用以下代码打印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的话,比较建议使用第一种方法。


使用特权

评论回复
沙发
classroom| | 2024-6-12 11:39 | 只看该作者
如何将字符串转换为int64/uint64

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:英飞凌科技股份公司
简介:关于英飞凌——我们致力于打造一个更加便利、安全和环保的世界,在赢得自身成功发展的同时,积极践行企业社会责任。

24

主题

35

帖子

2

粉丝