C应用集锦
1. offsetof
#include <stddef.h>
size_t offsetof(type, member);
The macro offsetof() returns the offset of the field member from the start of the structure type.
2. float和int转换
最简单的方法是采用union。
float ff = 123456.0; union{int i; float f;} conv; conv.f = ff; aa[0] = (unsigned short)conv.i; aa[1] = (unsigned short)(conv.i >> 16); printf("%X, %X, %X\n", conv.i, aa[0], aa[1]);
3. 字符串拼接
#define VERSION_DESC(name, author, date, extra) #name"_"#author"_v"#date"_"#extra
4. 去除目录文件前面的目录
#include <stdio.h> #include <string.h> #define DIR_FILE "/tmp/xxx/test" int main() { char *file; if(strrchr(DIR_FILE, '/')) file = strrchr(DIR_FILE, '/') + 1; printf("dir_file-> file [%s]\n", file); if(strrchr(file, '/')) file = strrchr(DIR_FILE, '/') + 1; printf("file-> file [%s]\n", file); return 0; }
5. printf %.*s
格式字符串中小数点.后“*”表示输出位数,具体的数据来自参数表;小数点.前添加*,表示输出的字符所占位宽,具体数据来自参数表。
printf格式字符串中,与宽度控制和精度控制有关的常量都可以换成变量,方法就是使用一个“*”代替那个常量,然后在后面参数列表中提供变量给“*”。
#include <stdio.h> int main() { printf("%.*s\n", 4, "Hello world"); printf("%*.*s\n", 7, 4, "Hello world"); return 0; } $ gcc printf.c -Wall -o test $ ./test Hell Hell