stdfmt.h#

stdfmt.h提供了格式化函数

Author

Shihong Wang (jack4shihong@gmail.com)

Version

0.2

Date

2023-04-09

Copyright

Copyright Shihong Wang (c) 2023 with GNU Public License V3.0

Functions

const char *_scan_number(const char *str, int *num)#

_scan_number用于将存储在str中的字符串数字转换为int数字并存入num

Note

_scan_number将在第一个非字符数字前停下, 即:

  • str = "123TEST", 则运行后num = 123, *return = ‘T

  • str = “12EST456”, 则运行后num = 12, *return = ‘E’

  • str = “ST456”, 则运行后num = 0, *return = ‘S’`

Parameters:
  • str – 字符串形式的数字

  • num – 转换后的数字将存入num

Returns:

const char* str第一个非字符数字

char *copy_number(char *str, unsigned long num, int base, int width, int precision, int flag)#

copy_number用于将整形的数字num按照指定进制base转换为字符串数字, 而后按照指定的宽度width和精度precision复制到str中去

Parameters:
  • str – 输出字符数组

  • num – 整形数字

  • base – 进制

  • width – 对齐宽度

  • precision – 输出位数

  • flag – 格式控制字符

Returns:

char* 复制后str的位置

size_t vsprintf(char *str, const char *format, va_list ap)#

vsprintf按照format中指定的格式将ap指向的可变参数列表的值复制到str

关于各个字段的说明:

  • flag字段:

    • -: 左对齐输出, 默认是右对齐

    • +: 输出正数前添加加号, 默认不添加

    • #: 当typeb, o, x, X时, 添加前缀0b, 0或者0x

    • 0: 使用0填充对齐, 默认使用空格填充对齐

  • width字段:

    • 数字: 设置对齐的宽度, 例如: printf("%5d", 100) 将会输出 100

    • *: 动态参数, 由后续的数字指定, 例如: printf("%*d", 5, 10) 等价于 printf(“%5d”, 10) -precision字段: -.数字: 设置输出的位数, 例如:printf(“%.2d”, 111)将会输出11 -.*: 动态参数, 由后续的数字指定, 例如:printf(“%.*d”, 2, 111)等价于 printf("%.2d", 111)

  • length字段:

    • h: 输出一个16位宽度的整数, 即: short, unsigned short, int16_t, uint16_t

    • l: 输出一个64位宽度的整数, 即: long, unsigned long, int64_t, uint64_t

    • ll: 输出一个64位宽度的整数, 即: long long, unsigned long long

    • PS: RISC-V LP64中long long和long都是64位

  • type字段:

    • %: 输出一个%

    • p: 输出一个指针, 需要转换为(void*)

    • c: 输出一个字符

    • s: 输出一个\0结尾的字符串

    • b: 以二进制输出一个整数, 无符号

    • o: 以八进制输出一个整数, 无符号

    • i: 以十进制输出一个整数, 有符号

    • d: 以十进制输出一个整数, 有符号

    • u: 以十进制输出一个整数, 无符号

    • x: 以十六进制输出一个整数, 小写字母, 无符号

    • X: 以十六进制输出一个整数, 大写字母, 无符号

    • n: 到此处已经输出的字符的数量, 不会输出文本, 而是将值保存到地址中. 参考: https://blog.csdn.net/zsx0728/article/details/118100389

Note

格式控制字符: %[flag][width][precision][length]<type>. 其中:

  • type字段必须存在, 其余字段均可选

Parameters:
  • str – 接受输出的字符数组

  • format – 含格式控制字符的字符串.

  • ap – 可变参数列表

Returns:

size_t 处理后的字符串(str)的长度

size_t sprintf(char *buf, const char *format, ...)#

sprintf将格式字符串format的格式控制字符替换为可变参数并输出到buf

关于各个字段的说明:

  • flag字段:

    • -: 左对齐输出, 默认是右对齐

    • +: 输出正数前添加加号, 默认不添加

    • #: 当typeb, o, x, X时, 添加前缀0b, 0或者0x

    • 0: 使用0填充对齐, 默认使用空格填充对齐

  • width字段:

    • 数字: 设置对齐的宽度, 例如: printf("%5d", 100) 将会输出 100

    • *: 动态参数, 由后续的数字指定, 例如: printf("%*d", 5, 10) 等价于 printf(“%5d”, 10) -precision字段: -.数字: 设置输出的位数, 例如:printf(“%.2d”, 111)将会输出11 -.*: 动态参数, 由后续的数字指定, 例如:printf(“%.*d”, 2, 111)等价于 printf("%.2d", 111)

  • length字段:

    • h: 输出一个16位宽度的整数, 即: short, unsigned short, int16_t, uint16_t

    • l: 输出一个64位宽度的整数, 即: long, unsigned long, int64_t, uint64_t

    • ll: 输出一个64位宽度的整数, 即: long long, unsigned long long

    • PS: RISC-V LP64中long long和long都是64位

  • type字段:

    • %: 输出一个%

    • p: 输出一个指针, 需要转换为(void*)

    • c: 输出一个字符

    • s: 输出一个\0结尾的字符串

    • b: 以二进制输出一个整数, 无符号

    • o: 以八进制输出一个整数, 无符号

    • i: 以十进制输出一个整数, 有符号

    • d: 以十进制输出一个整数, 有符号

    • u: 以十进制输出一个整数, 无符号

    • x: 以十六进制输出一个整数, 小写字母, 无符号

    • X: 以十六进制输出一个整数, 大写字母, 无符号

    • n: 到此处已经输出的字符的数量, 不会输出文本, 而是将值保存到地址中. 参考: https://blog.csdn.net/zsx0728/article/details/118100389

Note

格式控制字符: %[flag][width][precision][length]<type>. 其中:

  • type字段必须存在, 其余字段均可选

Parameters:
  • buf – 接受输出的字符数组

  • format – 含格式控制字符的格式字符串

  • ... – 可变参数列表

Returns:

size_t 输出到buf字符数组中的字符个数