C语言sprintf例子

sprintf使用例子:

1、BCD转换成字符

char src = 0x3A;
char tmp[6];
memset(tmp, 0x00, sizeof(tmp));
sprintf(tmp, "%02X", src);

说明:
1)打印出tmp为3A
2)%02X含义:
02:0表示长度不足用0填充,2表示格式化后总长度是2
X:表示以大写16进制形式输出

2、字符串数值相加

char * p = "000000000100";
char * p2 = "000000000099";
char * p3 = "000000876666";
double d = 0.0;
d = atof(p); //atof字符串转double
d += atof(p2);
d += atof(p3);
char temp[16];
memset(temp, 0x00, sizeof(temp));
sprintf(temp, "%016.0lf", d);

说明:
1)打印出temp为0000000000876865
2)%016.0lf含义:
016:0表示长度不足用0来填充,16表示格式化后的总长度是16
.0lf:.0表示小数点后长度是0,整数部分=总长度-小数点后长度。lf是long float型,与double同义

3、int转字符串

int i = 11;
char buf[6];
memset(buf, 0x00, sizeof(buf));
sprintf(buf, "%04d", i);

说明:
1)打印出buf为:0011
2)%04d说明:
04:0表示长度不足用0填充,4表示格式化后总长度是4
d:表示以整数形式输出

4、字符串不足位数前补0

sprintf(pde3901.value +9, "%0*d%s", 11-strlen(INST_CODE_JCB), 0, INST_CODE_JCB); //不足11位前补0

说明:
1)%0*d%s:
0*:*表示自定义参数,即第一个参数,11-strlen(INST_CODE_JCB)要补位的长度,但是如果原本就是字符串不会补0,只会补空格
d:表示以整数形式输出第二个参数,即后面的0
%s:表示以字符串形式输出INST_CODE_JCB

5、文件写入16进制数
fprintf写入文件遇到0x00就结束了,后面都用空格代替。写入16进制要用fwrite函数

fwrite(file_header.sBitMap, 16, 1, fp);

6、%s中的小数点

sprintf(sMsg, "SQLCODE = [%d], MSG = [%.*s]", sqlca.sqlcode, sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);

说明:
1)%.*s:
点的作用:%m.ns中m表示整个字符串的总长度,长度不足补空格,n表示从相应的字符串中最多取用的字符数
星号的作用:这里用*代替了%m.ns中的n,表示动态的精度设置。对应的变量是sqlca.sqlerrm.sqlerrml

7、十进制转十六进制
十进制转十六进制:

int i = 10;
sprintf(Tmpbuf, "%02x", i);

Tmpbuf是”0A”

8、十六进制转十进制
十六进制转十进制:

—–这个好像没用—–

char c = 0x0A;
int i = 0;
sscanf(&c, "%d", &i);
printf("i [%d]\n", i);

i输出是10
———————-

十六进制转成十进制字符串,十进制字符串转成int类型
0x0B –> “11” –> 11

char d = 0x0B;
char tmp2[2];
int k = 0;
sprintf(tmp2, "%d", d);
k = atoi(tmp2);
printf("k [%d]\n", k);