一、ssanf
实现字符数组中字符==》各种数据类型
int sscanf(const char *str, const char *format, ...)
sscanf( charbuff, "read99,%s,%s,%d,%d,*", weekday, month, &day, &year );
中间的分隔符可以是逗号,也可以是空格。
二、sprintf
实现各种数据类型==》字符类型,并存储于字符数组中
sprintf(sendbuff,"read99,%f,%f,%f,%f,%f,%d,%d,%d,%d,%d,%d,%d,*",
info.lon, info.lat, info.elv, info.speed, info.direction,info.satinfo.inview,
info.utc.year,info.utc.mon,info.utc.day,info.utc.hour,info.utc.min,info.utc.sec);
功能
C库函数 int vsprintf(char *str,const char *format,va_list arg)使用 参数列表格式化 输出到字符串
参数
- str 指向一个字符串数组的指针
- format 这是一个字符串,包含了要被写入到字符串str的文本(format可以是包含嵌入的format标签,这些标签可以被随后的附加参数中指定的值替换,并按需格式化)
format具体讲解
一般形式:%[flags][width][.precision][length]specifier
specifier为必选参数,跟我们常用的printf参数没什么两样,比如%d表示十进制数,%c表示字符。具体细节如下表:
specifier | 释义 |
---|---|
c | 字符 |
s | 字符串 |
f | 浮点数 |
d or i | 有符号十进制数 |
u | 无符号十进制 |
o | 有符号八进制 |
p | 指针地址 |
n | 无输出 |
% | 字符百分号%输出 |
x or X | 有符号十六进制小写或者大写 |
e or E | 使用e字符或者E字符的科学记数法 |
g 或者G | 根据数值不同,自动选择%e or %G 或者%f记数法 |
其余为可选参数,不显示声明,则默认缺省。以下一一介绍:
flags | 释义 |
---|---|
- | 在给定的字段宽度内左对齐,缺省值 右对齐 |
+ | 强制在输出结果前加上符号位,正数带+,负数带-,缺省值 只有负数带-,正数不带+ |
(space) | 如果没有写入任何符号,则在该值前面插入一个空格 |
# | 与 o、x 或 X 说明符一起使用时,非零值前面会分别显示 0、0x 或 0X,缺省不显示。与 e、E 和 f 一起使用时,会强制输出包含一个小数点,即使后边没有数字时也会显示小数点。缺省,如果后边没有数字时候,不会显示显示小数点。与 g 或 G 一起使用时,结果与使用 e 或 E 时相同,但是尾部的零不会被移除 |
0 | 在指定填充padding的数字左边放置0,而不是空格 |
width | 释义 |
---|---|
(number) | 要输出的字符最小数目。如果输出的值短于该数,结果用空格填充。如果输出的值长于该数,结果不截断 |
* | 宽度在format字符串中未指定,但是会作为附加整数值参数放置与要被格式化的参数之前 |
precision | 释义 |
---|---|
.number | 对于整数说明符(d、i、o、u、x、X):precision 指定了要写入的数字的最小位数。如果写入的值短于该数,结果会用前导零来填充。如果写入的值长于该数,结果不会被截断。精度为 0 意味着不写入任何字符。 对于 e、E 和 f 说明符:指定要在小数点后输出的小数位数。 对于 g 和 G 说明符:指定要输出的最大有效位数。 对于 s: 指定要输出的最大字符数。 默认情况下,所有字符都会被输出,直到遇到末尾的空字符。 对于 c 类型:没有任何影响。如果指定时不带有一个显式值,则假定为 0。当未指定任何精度时,缺省为 1 |
* | 精度在 format 字符串中未指定,但是会作为附加整数值参数放置于要被格式化的参数之前 |
length | 释义 |
---|---|
h | 参数被解释为短整型或无符号短整型(仅适用于整数说明符:i、d、o、u、x 和 X) |
l | 参数被解释为长整型或无符号长整型,适用于整数说明符(i、d、o、u、x 和 X)及说明符 c(表示一个宽字符)和 s(表示宽字符字符串) |
L | 参数被解释为长双精度型(仅适用于浮点数说明符:e、E、f、g 和 G) |
返回值
如果成功,则返回写入的字符总数,否则返回负数
示例
printf("%x\n", j); //输出结果为: 2f
printf("%X\n", j); //输出结果为: 2F
printf("%#x\n", j); //输出结果为: 0x2f
printf("%#X\n", j); //输出结果为: 0X2F %#X推荐使用
三、printf
# include <stdio.h>
int printf(const char *format, ...);
printf("Hello World!\n"); // \n表示换行
printf("%d\n", i); /*%d是输出控制符,d 表示十进制,后面的 i 是输出参数*/
printf("%d %d\n", i, j);
printf("i = %d, j = %d\n", i, j);
控制符 | 说明 |
---|---|
%d | 按十进制整型数据的实际长度输出。 |
%ld | 输出长整型数据。 |
%md | m 为指定的输出字段的宽度。如果数据的位数小于 m,则左端补以空格,若大于 m,则按实际位数输出。 |
%u | 输出无符号整型(unsigned)。输出无符号整型时也可以用 %d,这时是将无符号转换成有符号数,然后输出。 |
%c | 用来输出一个字符。 |
%f | 用来输出实数,包括单精度和双精度,以小数形式输出。不指定字段宽度,由系统自动指定,整数部分全部输出,小数部分输出 6 位,超过 6 位的四舍五入。 |
%.mf | 输出实数时小数点后保留 m 位,注意 m 前面有个点。 |
%o | 以八进制整数形式输出。 |
%s | 用来输出字符串。用 %s 输出字符串同前面直接输出字符串是一样的。但是此时要先定义字符数组或字符指针存储或指向字符串,这个稍后再讲。 |
%x(或 %X 或 %#x 或 %#X) | 以十六进制形式输出整数 |