基础类
整形,字符串互转
C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明。 ● itoa():将整型值转换为字符串。 ● ltoa():将长整型值转换为字符串。 ● ultoa():将无符号长整型值转换为字符串。 ● gcvt():将浮点型数转换为字符串,取四舍五入。 ● ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。 ● fcvt():指定位数为转换精度,其余同ecvt()。
除此外,还可以使用sprintf系列函数把数字转换成字符串,其比itoa()系列函数运行速度慢
以下是用itoa()函数将整数转换为字符串的一个例子:
1 | # include <stdio.h> |
itoa()函数有3个参数:第一个参数是要转换的数字,第二个参数是要写入转换结果的目标字符串,第三个参数是转移数字时所用 的基数。在上例中,转换基数为10。10:十进制;2:二进制…
itoa并不是一个标准的C函数,它是Windows特有的,如果要写跨平台的程序,请用sprintf。是Windows平台下扩展的,标准库中有sprintf,功能比这个更强,用法跟printf类似:
1 | char str[255]; |
cpp中string转int:
1 | void str2int(int &int_temp,const string &string_temp) |
cpp中int转string:
1 | void int2str(const int &int_temp,string &string_temp) |
架构类
Linux C代码实现主函数参数选项解析
1. 手动解析版本
使用argc、argv,逐个字符比较,得到要想的参数名字即进行判断、解析。
1 | #include <stdio.h> |
2. 利用getopt函数完成
1 | /** |
网络模块
日志模块
读取配置文件模块
内存池模块
缓存库模块
文件系统模块
管理后台模块
数据库模块
技巧类
Linux程序中预定义的几个调试宏
Linux下C语言编程中有几个很实用的调试宏
1 | __LINE__ __FILE__ __FUNCTION__ __TIME__ __DATA__ |
这几个预定义宏是属于ANSI标准的,内置于编译器,全局性的变量,可以方便地实现代码跟踪调试,不是在哪个头文件中包含的,见下例:
1 | #include <stdio.h> |
运行结果:
1 | The file is macro.c. |
line 行数 文件名
指令可以改变它的值,简单的讲,编译时,它们包含程序的当前行数和文件名。
DATE 宏指令含有形式为月/日/年的串,表示源文件被翻译到代码时的日期。 TIME 宏指令包含程序编译的时间。时间用字符串表示,其形式为时:分:秒
__func__
代表这条语句所在的函数的函数名
联合体用途
字节序有两种表示方法:大端法(big ending),小端法(little ending)。网络字节序采用的是大端法。主机字节序不同的CPU采用的方法不一样,可以通过代码来查看自己主机的字节序。
- 大端法:高位字节排放在内存低地址端,低位字节排放在内存的高地址端。
- 小端法:低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。 看一个unsigned short 数据,它占2个字节,给它赋值0x1234。
- 若采用的大端法,则其低地址端应该存放的是0x12;
- 若采用的小端法,则其低地址端应该存放的是0x34;
可以通过联合体来获得其高低地址的数据。测试主机字节序的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21typedef union{
unsigned short value;
unsigned char bytes[2];
}Test;
int main(void)
{
Test test_value;
test_value.value = 0x1234;
if(test_value.bytes[0] == 0x12 && test_value.bytes[1] == 0x34)
{
printf("big ending");
}
else if(test_value.bytes[0] == 0x34 && test_value.bytes[1] == 0x12)
{
printf("little ending");
}else{
printf("use test_value error");
}
return 0;
}
工具类
自定义日志的调试打印信息
1 | #define TRACE_NONE 0 |
1 | int LogMsg(int level, const char *filename, |
再在后台进程中设置TraceLevel和TraceName即可。
获取当前系统日期、时间
1 | /***************************************************************************** |
1 | /***************************************************************************** |
1 | /***************************************************************************** |
调用的时候定义一个char数组,大小为日期的长度大小加1,然后直接调用上面的函数,参数为数组名即可。 当然,还有其他许多关于日期、时间操作的函数,比如不同日期、时间格式间的转换等。