改写串口库,自带的库内存太大
来源:互联网 发布:界面编程 编辑:程序博客网 时间:2024/05/16 12:22
void print_ch(char s){ SendData(s);// buf[pp] = s;// pp++;}void print_chs(char*s){ while(*s) { print_ch(*s++); }}//字符串void print_str(char* str){ print_chs(str);}//打印2进制数,打印2进制数,除0和负数void print_bin_0(int bin){ if(bin == 0) { print_chs("0b"); return; } print_bin_0(bin/2); print_ch( (char)(bin%2 + '0'));}//打印2进制数void print_bin(int bin){ if(bin == 0) { print_chs("0b0"); return; } if(bin<0) { print_ch('-'); bin = 0-bin; } print_bin_0(bin);}//打印10进制数,除0和负数void print_dec_0(long dec){ if(dec==0) { return; } print_dec_0(dec/10); print_ch( (char)(dec%10 + '0'));}//打印10进制数void print_dec(long dec){ if(dec==0) { print_ch('0'); return; } if(dec<0) { print_ch('-'); dec = 0-dec; } print_dec_0(dec);}//打印float小数void print_flt(double flt){ //int icnt = 0; long tmpint = 0; unsigned char i = 0; if(flt<0) { print_ch('-'); flt = 0-flt; } else if(flt==0) { print_ch('0'); return; } tmpint = (int)flt; if(tmpint>=1) print_dec(tmpint); else if(flt>0) print_ch('0'); flt = flt - tmpint; if((flt!=0)&&(flt<1)) { print_ch('.'); tmpint = (long)(flt * 1000000); for(i=6;i>0;i--) { flt *= 10; if((char)(flt)%10 == 0) print_ch('0'); else break ; } for(i=6;i>0;i--) { if(tmpint%10 == 0) tmpint /= 10; else break ; } print_dec(tmpint); }}//以16进制打印,除0和负数void print_hex_0(long hex){ if(hex==0) { print_chs("0x"); return; } print_hex_0(hex/16); hex %= 16; if(hex < 10) { print_ch((char)((hex%16) + '0')); } else { print_ch((char)((hex%16) - 10 + 'A' )); }}//以16进制打印void print_hex(long hex){ if(hex==0) { print_chs("0x0"); return; } if(hex<0) { print_ch('-'); hex = 0-hex; } print_hex_0(hex);}void print(char* fmt, ...){ double vargflt = 0; int vargint = 0; char* vargpch = NULL; char vargch = 0; char* pfmt = NULL; va_list vp; va_start(vp, fmt); pfmt = fmt; while(*pfmt) { if(*pfmt == '%') { switch(*(++pfmt)) { case 'c': vargch = va_arg(vp, int); /* va_arg(ap, type), if type is narrow type (char, short, float) an error is given in strict ANSI mode, or a warning otherwise.In non-strict ANSI mode, 'type' is allowed to be any expression. */ print_ch(vargch); break; case 'd': case 'i': vargint = va_arg(vp, int); print_dec(vargint); break; case 'f': vargflt = va_arg(vp, double); /* va_arg(ap, type), if type is narrow type (char, short, float) an error is given in strict ANSI mode, or a warning otherwise.In non-strict ANSI mode, 'type' is allowed to be any expression. */ print_flt(vargflt); break; case 's': vargpch = va_arg(vp, char*); print_str(vargpch); break; case 'b': case 'B': vargint = va_arg(vp, int); print_bin(vargint); break; case 'x': case 'X': vargint = va_arg(vp, int); print_hex(vargint); break; case '%': print_ch('%'); break; default: break; } pfmt++; } else { print_ch(*pfmt++); } } va_end(vp);}
阅读全文
0 0
- 改写串口库,自带的库内存太大
- C#自带的serialPort串口控件
- Skia库内存泄漏
- com库内存管理
- AIX 5L 上的共享库内存占用
- OpenCV 1.x的库内存泄漏问题
- 使用QT自带库实现检测串口并且显示
- php自带的简易的unit函数,可以代替echo调试,但是意义好象不太大
- OpenGL扩库内存泄漏
- log4cxx库内存泄露解决办法
- boost库内存池使用
- Hi3515自带串口驱动加载说明
- Hi3515自带串口驱动加载说明 .
- Qt5中自带串口类QtSerialPort
- Qt5 自带 串口通讯基础模块
- VC6调试版本C运行库内存申请的一个bug
- VC调试版本C运行库内存申请的一个bug(转)
- boost准模板库内存管理中pool和object_pool的使用
- STL学习笔记-模板知识
- Disruptor 2.0更新摘要
- 傅里叶分析之掐死教程(完整版)
- Java集合框架(一)--构图
- 【swing】JLabel详解以及使用示例
- 改写串口库,自带的库内存太大
- remote catalog 更新问题
- 读取修复(三)
- 基于HTTP模拟实现静态服务器-协程实现
- Javaweb零基础开发(二) MySQL配置和Tomcat配置
- 微信小程序之方法单独提取&调用
- 如何使用 Disruptor(三)写入 Ringbuffer
- Spring aop
- Codeforces 898E