如何在C语言中自定义一个进制转换函数

  介绍

本文章向大家介绍如何在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语言中自定义一个进制转换函数