介绍
本文章向大家介绍如何在C语言中自定义一个进制转换函数的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
<强> C语言实现进制转换函数的实例详解强>
<强>前言:强>
写一个二进制,八进制,十六进制转换为十进制的函数
<强>要求:强>
- <李>
函数有两个参数,参数(1)是要转换为十进制的进制数,参数(2)是标示参数(1)是什么进制(2,8,16标示二进制,八进制,十六进制)。
李> <李>要有报错信息,比如参数是1012,但参数(2)是2,显然是进制数表示有错误。
李>系统表pg_proc存储关于函数的信息
内部函数在编译之前需要先定义在pg_proc。h中,src/include/目录/pg_proc。h
目录(pg_proc, 1255), BKI_BOOTSTRAP BKI_ROWTYPE_OID (81), BKI_SCHEMA_MACRO { ,NameData proname;/*, procedure name */,/*,函数名,sql 中,select 函数名();*/,Oid pronamespace;,/*, Oid of namespace containing 却;能够proc */,,/*,模式Oid */,Oid proowner;,/*, procedure owner */,/*,用户Oid */,Oid prolang;,/*, Oid of pg_language entry */,float4 procost;/*, estimated execution cost */,,/*,估计执行成本,*/,float4 prorows;/*, estimated #, of rows out (if proretset), */,/*,结果行估计数,*/,Oid provariadic;,/*, element type of variadic 数组,0,趁机*/,regproc protransform;/*, transforms calls 用it during planning */,bool proisagg;/*, is it an 总?,*/,/*,是否为聚集函数,*/,bool proiswindow;/*, is it a window 函数?,*/,,/*,是否为窗口函数,*/,bool prosecdef;/*, security definer */,,/*,函数是一个安全定义器,也就是一个“setuid"函数,*/,bool proleakproof;/*, is it a leak-proof 函数?,*/,,/*,有无其他影响,*/,bool proisstrict;/*, strict with respect 用null ?, */,/*,遇到,NULL 值是否直接返回,NULL */,bool proretset;/*, returns a ,准备好了吗?,*/,/*,函数返回一个集合,*/,char provolatile;/*,阅读PROVOLATILE_ categories below */,int16 pronargs;/*, number of arguments */,/*,参数个数,*/,int16 pronargdefaults;/*, number of arguments with defaults */,/*,默认参数的个数,*/,Oid prorettype;,/*, Oid of result type */,/*,返回参数类型Oid */,/* ,* variable-length fields  start 在这里,,but allow direct access 我方表示歉意 ,* proargtypes ,*/,oidvector proargtypes;/*, parameter types (excludes OUT  params), */,/*,存放函数参数类型的数组,*/# ifdef CATALOG_VARLEN ,Oid proallargtypes [1];,/*, all param types (NULL if 只有拷贝),*/,char proargmodes [1];,/*, parameter modes (NULL if 只有拷贝),*/,text proargnames [1];,/*, parameter names (NULL if no 名称),*/,pg_node_tree proargdefaults/*, list of expression trees for 争论 ,,,,*,defaults (NULL if 没有),*/,Oid protrftypes [1];,/*, types for which 用apply transforms */,text prosrc  BKI_FORCE_NOT_NULL;,/*, procedure source text */,/*,函数处理器如何调用函数,实现函数的函数名,*/,text probin;,,/*, secondary procedure info (还要be 零),*/,text proconfig [1];,/*, procedure-local GUC settings */,aclitem proacl [1];,/*, access permissions */# endif },FormData_pg_proc;
在proc.h添加函数定义:
/*, myfunc */数据(insert OID =, 6663, (, x_to_dec PGNSP  PGUID 12, 1, 0, 0, 0, f f f f t f 小姐:2,0,23,“25,23“,_null_ _null_ _null_ _null_ _null_ x_to_dec _null_ _null_ _null_ )); 备注说明(“x_to_dec !”); OID =, 6663,,/*, OID 唯一,不能与其他定义,OID 重复,*/x_to_dec ,/*, sql 中,select x_to_dec (); */null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null如何在C语言中自定义一个进制转换函数