C语言——sscanf函数
sscanf()可以同时把十六进制或十进制数据解析成`int`类型。
简介
在写一个读取mipi_phy寄存器的脚本中,为解决读取参数支持十六进制或十进制的问题,发现了C库中的解包函数sscanf()
过程
由于main()
获取到的参数是字符串类型,将字符串转换成int
,最开始想到的方式是aoti()
函数,但它无法解析十六进制,后查找文档后发现了sscanf()
,它可以同时把十六进制或十进制数据解析成int
类型。
描述
int sscanf(const char *str, const char *format, ...)
从字符串读取格式化输入。
参数
str — 这是 C 字符串,是函数检索数据的源。
format — 这是 C 字符串,包含了以下各项中的一个或多个:空格字符、非空格字符 和 format 说明符。
format 说明符形式为 [=%[*][width][modifiers]type=]
详见:https://www.runoob.com/cprogramming/c-function-sscanf.html
实例
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
int main(int argc,char *argv[])
{
if(argc < 3)
{
printf("read phy reg: [ mipi_rw -r addr ] \n");
printf("write phy reg: [ mipi_rw -r addr val ] \n");
return 0;
}
if(strncmp(argv[1], "-r",16) == 0)
{
unsigned short val=0;
int addr=0;
sscanf(argv[2],"%x",&addr);
printf("read phy reg=[%#x], val=[%#x] \n",addr,val);
return 0;
}
return 0;
}
编译:
gcc mipi_rw.c -o mipi_rw
运行结果:
$ mipi_rw -r 0x5
read phy reg=[0x5], val=[0]
$ mipi_rw -r 5
read phy reg=[0x5], val=[0]
Makefile代码:
include ../../GlobalRules.make
INSTALL_DIR = $(APIDEV_DIR)/bin
SRCS += $(wildcard ./*.c)
OBJS += $(SRCS:.c=.o)
CFLAGS += -I$(shell pwd)
LFLAGS += -L$(shell pwd)
LFLAGS += -lmipi
%.o:%.c
$(CC) $(CFLAGS) -o $@ -c $^
default:
make all
.PHONY:all
all: $(OBJS)
$(CC) $^ $(CFLAGS) $(LFLAGS) -o $(shell pwd)/mipi_rw