格式化输出字符串,有符号整形和无符号整形


1. 最近遇到的问题,格式化输出的时候遇到了一个错误

char test = -106; Report("test tlv:%d,%d,%d,%d",*o_val,(signed char)*o_val,test,(signed char)test);

看下report函数底层的代码

char log_pc_buff[128] = {0}; int Report(const char *pcFormat, ...) { int iRet = 0; char *pcBuff, *pcTemp; int iSize = 512; va_list list; pcBuff = log_pc_buff; if(pcBuff == NULL) { return -1; } while(1) { va_start(list,pcFormat); iRet = vsnprintf(pcBuff,iSize,pcFormat,list); va_end(list);

输出的结果

test tlv:155,-101,150,-106

总结起来,底层的vsnprintf函数,如果不强制转换成有符号,那么就会出问题。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM