簡介
在寫一個讀取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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/296709.html
標籤:C
