user-0 提问: 关于程序启动参数输入任意ASCII码

回复:
user: user-1
content: 作为一个C程序员，对  scanf,sscanf,fscanf  printf,sprintf,fprintf 这类函数的用法，还是要做到“拳不离手，曲不离口”的。

user: user-0
content: 引用 14 楼 zhao4zhong1 的回复:char buffer[9]; char a[4]; int i,v; sscanf(argv[1], “%8s”， buffer);"01020304" for (i=0;i<4;i++) {  sscanf(buffer+i*2,"%2x",&v);  a[i]=(char)v; } 多谢大神，涨知识了~非常感谢~~

user: user-2
content: 这种事情都来问，直接看楼上代码

user: user-1
content: int v; if (argc>=2) if (1==sscanf(argv[1],"--vendor=%i",&v)) printf("vendor==%d\n",v);

user: user-3
content: 你的参数有什么规则  就把解析方式自己写一套， 去解析argv 里面的内容。

user: user-0
content: 引用 1 楼 zhouqinghe24 的回复:自己写解析吧。 什么意思老大？写啥解析？

user: user-1
content: if ('\'==buffer[j] && 'x'==buffer[j+1]) { 改为 if ('\\'==buffer[j] && 'x'==buffer[j+1]) {

user: user-1
content: 上贴char buffer[9];改为char buffer[17];

user: user-1
content: char buffer[9]; char a[17]; int i,v,j; sscanf(argv[1], “%16s”， buffer);//"AB\x01C" j=0; for (i=0;i<4;i++) {  if ('\'==buffer[j] && 'x'==buffer[j+1]) {   sscanf(buffer+j+2,"%2x",&v);   a[i]=(char)v;   j+=4; } else   a[i]=buffer[j];j++; }

user: user-4
content: 引用 13 楼 dnfiexiao 的回复:[quote=引用 11 楼 user-4 的回复:] [quote=引用 9 楼 dnfiexiao 的回复:] [quote=引用 6 楼 user-4 的回复:] 你是不是搞错参数了？vendor 和 vendorclassid 不是一个参数 字符串中的十六进制跟 C 是一样的 加入 \x 前缀 "\x0f\x0e\x0a" 不行亲~ 还是怎么输入怎么输出[/quote] 加引号啊？ 我也不知道你这个 test 是什么东西了 --param1="\x0f" 这种是针对要求字符串的 --param2=0x0f   这种是针对要求数字的  也可以是10进制 --param2=15  另外你是在test里面调用了其他的东西么？引号还有'\' 的嵌套你要搞清楚哦[/quote] test我就是这样写的： 最后的结果是这样的： 因为我要重新写dhcpcd~难道要自己重新写一个函数，解析\x01\x02这样的输入吗？[/quote] int main(int argc, char** argv) 对程序而言，参数就是字符串，字符串的格式？你自己定义 如果你要写 test，那么是的，你要自己解析所有的参数

user: user-1
content: char buffer[9]; char a[4]; int i,v; sscanf(argv[1], “%8s”， buffer);"01020304" for (i=0;i<4;i++) {  sscanf(buffer+i*2,"%2x",&v);  a[i]=(char)v; }

user: user-0
content: 引用 11 楼 user-4 的回复:[quote=引用 9 楼 dnfiexiao 的回复:] [quote=引用 6 楼 user-4 的回复:] 你是不是搞错参数了？vendor 和 vendorclassid 不是一个参数 字符串中的十六进制跟 C 是一样的 加入 \x 前缀 "\x0f\x0e\x0a" 不行亲~ 还是怎么输入怎么输出[/quote] 加引号啊？ 我也不知道你这个 test 是什么东西了 --param1="\x0f" 这种是针对要求字符串的 --param2=0x0f   这种是针对要求数字的  也可以是10进制 --param2=15  另外你是在test里面调用了其他的东西么？引号还有'\' 的嵌套你要搞清楚哦[/quote] test我就是这样写的： 最后的结果是这样的： 因为我要重新写dhcpcd~难道要自己重新写一个函数，解析\x01\x02这样的输入吗？

user: user-0
content: 引用 10 楼 zhao4zhong1 的回复:你命令行输入 xxx.exe --vendor=0x01 看输出是不是vendor==1 #include <stdio.h> char s[]="0x123 ab 4"; char *p; int v,n,k; void main() {     p=s;     while (1) {         k=sscanf(p,"%i%n",&v,&n);         printf("k,v,n=%d,%d,%d\n",k,v,n);         if (1==k) {             p+=n;         } else if (0==k) {             printf("skip char[%c]\n",p[0]);             p++;         } else {//EOF==k             break;         }     }     printf("End.\n"); } //k,v,n=1,291,3 //k,v,n=0,291,3 //skip char[ ] //k,v,n=0,291,3 //skip char[a] //k,v,n=0,291,3 //skip char[b] //k,v,n=1,4,2 //k,v,n=-1,4,2 //End.  嗯，你这个没问题的~但如果我想用0x01 0x02 0x03 0x04将char[0:3]同时初始化，命令行调用的时候该怎么样呢？ sscanf(argv[1], “%s”， buffer) 谢谢大神~

user: user-4
content: 引用 9 楼 dnfiexiao 的回复:[quote=引用 6 楼 user-4 的回复:] 你是不是搞错参数了？vendor 和 vendorclassid 不是一个参数 字符串中的十六进制跟 C 是一样的 加入 \x 前缀 "\x0f\x0e\x0a" 不行亲~ 还是怎么输入怎么输出[/quote] 加引号啊？ 我也不知道你这个 test 是什么东西了 --param1="\x0f" 这种是针对要求字符串的 --param2=0x0f   这种是针对要求数字的  也可以是10进制 --param2=15  另外你是在test里面调用了其他的东西么？引号还有'\' 的嵌套你要搞清楚哦

user: user-1
content: 你命令行输入 xxx.exe --vendor=0x01 看输出是不是vendor==1 #include <stdio.h> char s[]="0x123 ab 4"; char *p; int v,n,k; void main() {     p=s;     while (1) {         k=sscanf(p,"%i%n",&v,&n);         printf("k,v,n=%d,%d,%d\n",k,v,n);         if (1==k) {             p+=n;         } else if (0==k) {             printf("skip char[%c]\n",p[0]);             p++;         } else {//EOF==k             break;         }     }     printf("End.\n"); } //k,v,n=1,291,3 //k,v,n=0,291,3 //skip char[ ] //k,v,n=0,291,3 //skip char[a] //k,v,n=0,291,3 //skip char[b] //k,v,n=1,4,2 //k,v,n=-1,4,2 //End.

user: user-0
content: 引用 6 楼 user-4 的回复:你是不是搞错参数了？vendor 和 vendorclassid 不是一个参数 字符串中的十六进制跟 C 是一样的 加入 \x 前缀 "\x0f\x0e\x0a" 不行亲~ 还是怎么输入怎么输出

user: user-0
content: 引用 6 楼 user-4 的回复:你是不是搞错参数了？vendor 和 vendorclassid 不是一个参数 字符串中的十六进制跟 C 是一样的 加入 \x 前缀 "\x0f\x0e\x0a" 对，我就是问这个~我试试哈，谢谢了大神！

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:int v; if (argc>=2) if (1==sscanf(argv[1],"--vendor=%i",&v)) printf("vendor==%d\n",v); 老板，我说的不是这个意思~我说的是，怎么输入非字母和数字，比如，我想初始化char a[10] 为0x01, 0x02, 0x03,0x04，这四个参数都是用键盘是没法输入的，咋办？

user: user-4
content: 你是不是搞错参数了？vendor 和 vendorclassid 不是一个参数 字符串中的十六进制跟 C 是一样的 加入 \x 前缀 "\x0f\x0e\x0a"

user: user-3
content: 自己写解析吧。