本帖最后由 happy886rr 于 2017-1-7 19:54 编辑
[2016/12/06]修复一处笔误。
THE OPT TO BYTE ARRAY LIB, COPYRIGHT@2016~2018 BY HAPPY, VERSION 1.0
opt2byte.LIB
摘要:
=============================================================================
这是可以解析命令行参数的库,用来帮助你快速构建命令行第三方工具的开关解析部分。
从此你无需再写开关解析。
=============================================================================
函数原型:
-----------------------------------------------------------------------------
//OPT转BYTE数组
byte* __cdecl Opt2Byte(
int argc, //argc
char** argv, //argv
char* optstr //开关正则
);
-----------------------------------------------------------------------------
引入:
-----------------------------------------------------------------------------
#include "opt2byte.h" //先引入头文件
#pragram commet(lib,"opt2byte.LIB"); //在项目中引入库文件
-lopt2byte -L./ //gcc连接参数
-----------------------------------------------------------------------------
命令开关正则语法:
-----------------------------------------------------------------------------
char* optstr="=/C* /U:utf-8 /CS /T* /D* /M* /?";
在上句opt正则中,其中第一个引号后的等号表示精确开关匹配,
即区分大小写匹配,不为等号则忽略大小写匹配。
其中*代表后继参数,一个*代表/C开关有一个后继参数。
其中:代表连参符,即/U开关后边无需空格即可连接参数,如/U:"utf-8"。
其中无*的开关表示没有任何后继参数。
opt2byte.LIB库,最大可支持99个开关解析,最多处理254个命令行参数。 当然你可以
在源码中修改以使其支持不限量的数目。
opt2byte.LIB库全部为本人原创,且不需要任何其他库文件,效率性能秒杀getopt函数,
无法解析的开关argv[unknown]将存入bp[100~127]的无法解析空间。 bp[0]表示解析状
态,即bp[0]为0时表示正常解析,否则其值为发生错误的argv序号。bp[1~99]为各开关
解析到的命令行参数argv序号。
-----------------------------------------------------------------------------
英译:
-----------------------------------------------------------------------------
THE OPT TO BYTE ARRAY LIB, COPYRIGHT@2016~2018 BY HAPPY, VERSION 1.0
-----------------------------------------------------------------------------
This is a library of command-line arguments that can help you quickly build
switch-resolution parts of command-line third-party tools.From then on you do
not have to repeat the write switch every time parsing.
-----------------------------------------------------------------------------
12/05/2016
核心代码: | | | | | | | | | | | | | | | #ifndef byte | | typedef unsigned char byte; | | #endif | | #ifndef calloc | | #include <stdlib.h> | | #endif | | | | | | byte* Opt2Byte(int argc, char** argv, char* optstr) | | { | | | | int oargc=argc-1; | | | | char** oargv=argv; | | | | | | int i=0; | | | | | | int unknown=100; | | | | | | byte ostrcase=(*optstr=='=')?1:0; | | | | | | char* ostr=(ostrcase==1)?optstr+1:optstr; | | | | | | byte* bp=(byte*)calloc(128, sizeof(byte)); | | | | | | if(oargc==0){bp[0]=0xFF;} | | | | | | while((++i)<=oargc){ | | | | | | char* op=ostr; | | | | int m=0; | | | | while(*op!='\0'){ | | | | while(*op==' '){op++;} | | | | | | m++; | | | | | | char* vp=oargv[i]; | | | | while(*vp!='\0'){ | | | | char tp1=*op, tp2=*vp; | | | | if(ostrcase==0){ | | tp1=('a'<= tp1 && tp1<='z')?tp1-32:tp1; | | tp2=('a'<= tp2 && tp2<='z')?tp2-32:tp2; | | } | | | | if(tp1!=tp2){break;} | | op++, vp++; | | } | | | | | | if( | | (*vp=='\0') && | | ( | | *op==' ' || | | *op=='*' || | | *op=='\0' | | ) | | ){ | | | | if(*(op-1)==':'){ | | bp[m]=i; | | break; | | | | | | }else if(*op==' '||*op=='\0'){ | | bp[m]=i; | | break; | | | | | | }else if(*op=='*' && i+1<=oargc){ | | bp[m]=i+1; | | break; | | | | | | }else{ | | bp[0]=i; | | return bp; | | } | | }else{ | | | | while(*op!='\0'&& *op!=' '){op++;} | | } | | | | } | | | | | | if(bp[m]!=i && bp[m]!=i+1 && *op!='*'){ | | bp[unknown++]=i; | | continue; | | } | | | | | | while(*op=='*'){ | | op++, i++; | | if(i>oargc){ | | bp[0]=i-1; | | return bp; | | } | | | | if(oargv[i][0]==ostr[0]){ | | bp[0]=i; | | return bp; | | } | | } | | } | | | | return bp; | | }COPY |
使用示例: | #include <stdio.h> | | #include "opt2byte.h" | | | | int main(int argc, char** argv) | | { | | int i; | | char* optstr="=/D** /U: /S /T"; | | | | byte* bp=Opt2Byte(argc, argv, optstr); | | | | if(bp[0]==255){printf("没有任何参数\n");} | | if(bp[0]!=0){printf("在%s附近出现错误,可能是缺少参数,或是无法解析的开关\n", argv[bp[0]]);} | | | | for(i=1; i<=4; i++){printf("%d\n",bp[i]); } | | | | return 0; | | | | }COPY |
下载,base64加权码 | @echo off | | setlocal enabledelayedexpansion | | | | ::*********BASE64 加权解码器********* | | set $=set [#]&CALL :BASE64_PRESS&set [$]=A&((for %%Z in ([,],{,},_,$,#,-,@) do (set [$]=![$]!![$]!&for %%S in (![$]!) do (for /l %%i in (1,1,6) do (!$!%%i=![#]%%i:%%Z=%%S!))))&for /l %%i in (1,1,6) do (set/p=![#]%%i:.=!<NUL))>opt2byte.BSEP&certutil -decode opt2byte.BSEP opt2byte.zip&pause&exit /b | | ::*********************************** | | | | :BASE64_PRESS | | | | !$!1=UEsDBAo][BNPhkk}E]bGliL1BLAwQU]C[gs4VJYL47QeI]WAQ[Dg[AGxpYi9vcHQyYnl0ZS5o09fi5eL0Dwi5vsopMsT11N/rL3etP/V3/yOgaIiHqwJQRiHEXwEkp+AYFOQYqeDj6aSj4OwfEBnk6e4R4mBkYGhWByQsgGoUPBwDAiJ1FMJcg4I9/f0UDPUMgMbkF5QYJVWWpOoBdQK57s7OQDP8vK0UdHNgUgq6Pnr6vFxaQMzLpZyZlpeSmqYAkuDlKqksSAXxSvOKM9PzUlMUkjMSi8By1kClqXkpmWkgTfr6KH7g5QKp0FKIj09OSU3OUfAHWuQEFNHIzCtRSCxKT9YBm6OlBeKUQTkKQOcUlxRpAg0GAFBLAwQU]C[OT4ZJ/6T4/ccC[B8B[AE]GxpYi9vcHQyYnl0ZS5MSUKFVN1r01AUv2mjbrXsKkynT3YwJ4h07ZSRbnOII5vIOhXJBF3tug8/oDBxiVMws7gEEq7FPXQP/h8jICuY1WI7fBmdDwP7EKWCpT74IMheGs9tu63DOQ8k95xffufr3nvS2ht5PPGgz9Xh2S3+C5wvwAXOcwGPx0eBXW/4zm0xx1wIIQaekfC1R2Ln5WfiFJoGZRwU73THvtH8Pl9XV1dl7dyKNsQ4EZXjsByuaCzjFaeeimhHYg6EXsHqrlIr6T3o+ph3MiJG0P5yCflM7/jMzH9oKAY8Qf92a+Tm/I9RIjRk+PwkwIQ/clUXCjHuIk7wWWwEs/NfGGZFD6bf0ir0oTY2w7bFQP1Oo+i8SYSCmpOcH5Cd4S3KIXIhIFv4dQ8YGT5JaURKY+OgYmLFD6C2QgQ34S3CvtT5pbjYjuLJM5WaNj1Sc509gI0mwMTfNp8k8hI2WpScOBx/ss2Xs0gLLmtr0iktq308F+k9OeuMlTxaCDBqaetVe4Pjl7H6C1wGB6pRDkDo0jt4+XOQASdSfjO2eRYnzMY1rJaAqKxKjcWvtSKUVbxoVpmLKTUl | | !$!2=lQBQh23bJrIVDzNEThLBxAbb0sNbUhQCSXMDPaHCi874UjsttFYvCbqJnCbNb7BxiHNg5RPtoe8sVj+D0k895vIQSNsoZzUH4c359Oidu+HQe8KniWBhoyF+e3cuMRHYEBcgn5iCo7KInNfcLYO6nNdDFpxLYL0olW1byWG1G4rdo1XlGOCxObtb9PlNZZWCKek0beAGCVn9tIcr2ICjCsI5J8umxrpgO4qz4LUDa6wL9gFw2IriT0gIpWsn6urvL0YrDgJ10I4WW8FaAOmDtul4NSPvvYfRqdrNLNsI3We2Z2yi/taytZWBeXAwf9/q+kmin53Mc0dV25H6KXJUOHvEqZsg5z844YlINDq9VR7Ug5oouv2X+ANQSwMECg][FU+GSQ}Q[ABzcmMvUEsDBBQ]IAPxOhkmqG0n40gQ[HIJ[AO]c3JjL29wdDJieXRlLmOdVf9PWlcU/xkS/odrlhR4gPBYujTibaeLnWamGmeWmM4fBB/1pfh4AaRr1f0vnclmqcsiAxGQuVZEit2TiYLLErO0S7fGNFl1qbaGZPfc+97j6TJ/2A/w7pfP+ZzPOefec92cxWwaGBxuJLpHhntWn5HZcG8PIitoeADBGuoaGuoaQf193U700cDgyFDfx73DH3o9/Adfkr8rBIN6uwYHR5zos56hT/sGbiC+3UNownLM678bE9qJJZn29934pAO5QtoycvW3uy1mjvws5vfEoDQuBBFsWMyxu7IAsykpKt6ShHEUmBiL0D0fgQrSuBhsmQTGQqFwAOZSIDQ1LqDOaGw8JPrbJ662wBaz260HWWk2Xua+qzQtZqDk0ABR1E1GNlGKobHIrYCTOuQ4mMTVCSK6o7GI3WKeRiQat3ultPm8Vq1+k1QqzUqzuAqrQBAGBgx/Lt5HkYAo1Cq79eXdA0Cp5ACMAzAOMB35468rtdKxxiZij76r7GfmC8+UN4BKF1MvMusbJyu/a8gp6bYUviNh3tOyYJorjUY9 | | !$!3=c6ok0uXc+tzCzmGlpiQ239aqq4ns3g9vN04y9dRR9X41RUxoYVCYGAXGogK2cYwBYyu22q/xHS3q9erSVmUj83o1Ufqbmc8tFE6WTqr7u02w1wOlbNimc2Lefo2xOvgONjDqXSw/3YMCIVUNh/wyttGRnZXaxnuvOFFUvCeEg3TDbvdZzNS+/Ef2dC1fq0KGINL6ml8GskpDySsJ7+XLNFlBG6sR9tin/fJNzyj2fHH9um9WUwEh1Y9//jafAfidCTEk2GwOh2jvxNTQPk3dEeST+bU/oarZl0reBMZayDIOq3FRvuxe9TC3DihYgWohNMkqS62YD5LsNmz93GMFByawzDYfb67uLr+moBaKlAMRUFh2OKhqRmLw1DpDJtMkARkxhYeQnc2fygeL5cJW6ZguM9lxmQYYvymOGkxUt/Gz4gjTo18qi8vz9XeQAbZG72lM5jER6SQDLyZmPg2vHQEl4YHi5N483iEnJwUyGEQMGo6JR3NkAkKbdczaiYEbXboEn05svUeOJBm53vd2kI9PR3tbaC9De3W0l6G9KnpW05bMb/2WLu8c1smxRroaQtuGCZqck4gwdltNtgkS7yTZ0jKrnhzgicuQje1SulB8oCS12wa39vsn2a8ZMyFmPJBUzJKKiFB1UY1DqzOamTmzwv1rhdhbzAjmduoAmVjqkMlwT5XEo4WkAgdEj46zhWUXbycMHXpVTeRCTI5iUcsmi1udsI+RU9mHwwSsatJmhVBUQECuyp+Z0UX+Tx+pk4t9cFYosujgDdfT6MbBX+gIumplafGvdBFcFB8sbZJG9jD1SjlS8vW11IvygV+G/mF0bvDgMQQSEWJTEYk0rDOny2jRahm5o+2SSnnu9pNg2PjcHW/ddDqymM+mSXsd0kXW/ZJfgXbtWdBeCqg7zUsbFiFt2tjBI90vp1WKbKrmDoceZiAsxURpSvCdUwK9V0lwqXeLr2rV3NHKU60Jw7d0DC3p/hyVYOxjui92 | | !$!4=p0TtShGZ4tUz5VRz7dKqeS7ZVIkuA0qZOd3YBt/JfOM56PjvokLfUfse+KC9mwzOeb7AL/zN0rcjk87vwZsEr4723hstCOofUEsDBBQ]IAPiyhUmzJRLhPwU[O8M[AK]cmVhZG1lLnR4dLVW/08TZxj/mUvuf3jXxQSQcoXIJmKX6WTTxAyCuIQ4Yo72oBfbu+56xZBF/xe8bZJa41qva2kpJ3BAW/S4tNcyicEFyebCgEiTblG77H16lsIU/aW8bdrkeZ/n83x/3qf/fDfq6e1H/T3o7EB/NzrT13dmAF28cLYFfdHTO9B34avz/Z+329o+uYl/TmIedP5Mb+9AC/qmu+/ShZ6vUVurjSR4r9g+NCYyrViQJEgiH8gGpDhJ2Ot5MOx6ZlFJZ43kulaaez2zrethLVOOqMq6FMzNPZB/3im8VJ8pfy09npxMTpgckdVUOZqc/GH6KeYLTP4KsmElWhiXSELOyUvqM21Nf2481uXqLdzY63kgIiQRv5cpG3f1R6dIwlrPQxIUhTO4EoD8Zcorf5IEpKIZXb3qcDION+rByTmLKY0k0cByIqKFEUcLeu+hKGBCWMDhooXmZpAZbfmQwOieAMIF4ROF9wpAuPNlY5ckmrrqHhL4ZMupTShCaz0PSXzMcg6338kgy17Vuyzv9XQ5BaY8imrq1L9Y3ivQIwLtQQ7e42HERjc71GLZ30CWpq6D8sbq8raqFHRAUdZNFKu7KoKsF1sp9KFDUSMOx0wwmYOOOZJw5+aiE0cZ7tM+0cnyra7PDkkB2ADl7aFZrrFW5/sKuIkkvieJ/9Wo3WKnzmEGRF0+hahLiOq3dNWCll9/sPNwW5dhltQKFkOYLTbkte91l6nObBQTuqmrCgHDKZnL5FcCiXvxYkSttSr05HDjkPeKbfAjuw1b2IBNbNij2e3tHR1ANckNXgF7NtxomUvk9JQW1yCb33IW6KCGhhuM28cc5DNWj/liyeTr+6XlgrylFaWg | | !$!5=klafZBZTofRjkJWCid3MorYWnYDJZ05IjGf6caViwiCAV+ArfxUlqGafremwgpN3c+PRglaKF03cqtOgd89PnCe2613ycDvMC42sva0LsaftJ/Dv8eNmKA7j33P7mBOcwBayg29CQxJv7BcY0S9wyAZkkrhxJK2wv1pyO0fSFh8qYTDDWE0vT29gHrCjoEtBk10LvM0vBdHCRgE/ltlErBRJxedDW5np6TupKLix8OP8hhQkiSl58Z9oQS7q47ps0lJ/TL4KJ7QASBi78dKsUbuFZ5QkALVZfhnaihenHpoVN5OMlSok6hyg53QgVK/HJVPmFDDMBMNa9JUUnJKpy8AaL4aewmut5GMvpmQlXZ1nYAj2xeIXh60nLVUIba3ZLDzwpdow+/Uc3FtgiVjZlotKunD7fqGzM1aqLgRA/+U3+acHW+0dJ2L7No9xCUVCqYT6DJYSiLchz24WdH0tpmaNzOTCBiCFE8trM0pEzZRV5V1aU3fCihYITaeWjLuyLAUXs+GE/jwbAGsXNpZemRNfCuq3ZzO6oT6Z20yHRhgRg8BGAXk52L6VzvVz1zj+OjeYvCP/ntrEjdBms91sa/90MKJWuZX8FM4RqrQxRAhoKzJJPAxCwCtkLWDLhOAuX74vmZGIvjB2sV8RLRC9lX4JIyWigkZ9Nz4/LoGim52dWDD2N9hCEhW7khG1FrQa99E8Q7eyR/Hq12dPttbZKBfrQ/hLI7xECLQwhvjhylpBc06rm+UYGON+D8OJPoREFy0iB80h5GLcXjTG+9F3ftZxzT2Ghvys24knqO86KzpcVoHx8W6/yPIc8tKC6HsLVXSxgtMKd2NI5Hm3r/VLgfdgMsMhnqtAO3mMx/EictGjWIBHAuNlaBF40HWBxWuLqQwxowy2W2Q9DCjzsdxIa93j1NZO2TooyM5/UEsBAh8ACg][E0+GSQ}QAJ{[Q{AGxpYi8KAC{EAGADGIjv8Y0/SAcYiO/xjT9IBwLl+V | | !$!6=/tO0gFQSwECHwAU]C[gs4VJYL47QeI]WAQ[DgAk{AC]Ai]bGliL29wdDJieXRlLmgKAC{EAGABSirFcA0/SASuYC9pjT9IBK5gL2mNP0gFQSwECHwAU]C[OT4ZJ/6T4/ccC[B8B[AE[k{AC]AwAQ[bGliL29wdDJieXRlLkxJQgoAI{QAYAIUaxPVjT9IBJbnB9WNP0gElucH1Y0/SAVBLAQIf[o][BVPhkk}EACQ{AE]CUE[BzcmMvCgAg][ABABgAgWEv/mNP0gGBYS/+Y0/SARp2aAL8TtIBUEsBAh8AF]AgA/E6GSaobSfjSB[Acgk[A4AJ{[g]RwQ[HNyYy9vcHQyYnl0ZS5jCgAg][ABABgAZOdl4mNP0gGL+Q3aY0/SAYv5DdpjT9IBUEsBAh8AF]AgA+LKFSbMlEuE/BQ[7ww[AoAJ{[g]RQk[HJlYWRtZS50eHQKAC{EAGABJGiYyA0/SAYv5DdpjT9IBi/kN2mNP0gFQSwUG][YABgAqAg[rA4]A | | goto :EOFCOPY |
|