PB个种进制转换函数

//-----------------------------------------------------------------//
// 函数名称: uf_Binary2Other
// 功能描述: 二进制数转换为其它进制数
// 作用范围: Public
// 参数说明: as_num:二进制数值
//      ai_type:目标进制类型
// 返 回 值: 目标进制数值
// 使用举例: uf_binary2other('1011',  10)
//      为将二进制数1011转换为10进制数
//-----------------------------------------------------------------//

integer li_i
long ll_num
string ls_rtn

 

//根据目标进制的不同做不同处理
Choose Case ai_type
  
 Case 2 //二进制
  ls_rtn = as_num
  
 Case 8 //八进制
  //补0
  Do while mod(len(as_num), 3) <> 0
   as_num = "0" + as_num
  Loop
  For li_i = 1  to len(as_num) Step 3
   ll_num = long(mid(as_num, li_i, 1)) * 4 + &
     long(mid(as_num, li_i+1, 1)) * 2 + long(mid(as_num, li_i+2, 1))
   ls_rtn = ls_rtn + string(ll_num)
  Next   
  
 Case 10 //十进制
  For li_i=1 to len(as_num)
   IF mid(as_num, li_i, 1) = "0" then
    ll_num = ll_num * 2
   else
    ll_num = ll_num * 2 + 1
   end if
  next   
  ls_rtn = string(ll_num)  
  
 Case 16 //十六进制
  //补0
  do while mod(len(as_num), 4)<>0
   as_num = "0" + as_num
  loop
  For li_i = 1  to len(as_num) step 4
   Choose Case mid(as_num, li_i, 4)
    Case "0000"
     ls_rtn = ls_rtn + "0"
    Case "0001"
     ls_rtn = ls_rtn + "1"
    Case "0010"
     ls_rtn = ls_rtn + "2"
    Case "0011"
     ls_rtn = ls_rtn + "3"
    Case "0100"
     ls_rtn = ls_rtn + "4"
    Case "0101"
     ls_rtn = ls_rtn + "5"
    Case "0110"
     ls_rtn = ls_rtn + "6"
    Case "0111"
     ls_rtn = ls_rtn + "7"
    Case "1000"
     ls_rtn = ls_rtn + "8"
    Case "1001"
     ls_rtn = ls_rtn + "9"
    Case "1010"
     ls_rtn = ls_rtn + "A"
    Case "1011"
     ls_rtn = ls_rtn + "B"
    Case "1100"
     ls_rtn = ls_rtn + "C"
    Case "1101"
     ls_rtn = ls_rtn + "D"
    Case "1110"
     ls_rtn = ls_rtn + "E"
    Case "1111"
     ls_rtn = ls_rtn + "F"
   End Choose
  Next   
  
 Case Else
  ls_rtn = as_num
  MessageBox('提示信息', '不正确的进制参数!')  
  
End Choose


Return ls_rtn 

//************************************************************************************************

//-----------------------------------------------------------------//
// 函数名称: uf_Number_Convert
// 功能描述: 进制转换
// 作用范围: Public
// 参数说明: as_num:要转换的数值
//      ai_type1:源进制类型
//      ai_type2:目标进制类型
// 返 回 值: 转换后数值
// 使用举例: uf_Number_Convert('1010', 2, 10)
//      为将2进制数1010转换为10进制数
//-----------------------------------------------------------------//

String ls_rtn
String ls_temp

  
//根据目标进制处理
Choose Case ai_type2
  
 Case 2 //目标进制为2进制

  //其它进制转换为2进制
  ls_rtn = uf_Other2Binary(as_num, ai_type1)
    
 Case 8 //目标进制为8进制

  CHoose Case ai_type1 //根据源进制处理
   Case 2 //2进制--> 8进制
    ls_rtn = uf_Binary2Other(as_num, 8) //2->8
   Case 8 //8进制--> 8进制
    ls_rtn = as_num    
   Case 10,16 //10或16进制--> 8进制
    ls_temp = uf_Other2Binary(as_num, ai_type1) //10或16->2
    ls_rtn = uf_Binary2Other(ls_temp, 8) //2->8
  End CHoose  
  
 Case 10

  CHoose Case ai_type1 //根据源进制处理
   Case 2 //2进制--> 10进制
    ls_rtn = uf_Binary2Other(as_num, 10) //2->10
   Case 8,16 //8或16进制--> 10进制
    ls_temp = uf_Other2Binary(as_num, ai_type1) //8或16->2
    ls_rtn = uf_Binary2Other(ls_temp, 10) //2->10
   Case 10 //10进制--> 10进制
    ls_rtn = as_num    
  End CHoose  
    
 Case 16 //目标进制为16进制

  CHoose Case ai_type1 //根据源进制处理
   Case 2 //2进制--> 16进制
    ls_rtn = uf_Binary2Other(as_num, 16) //2->16
   Case 8,10 //8或10进制--> 16进制
    ls_temp = uf_Other2Binary(as_num, ai_type1) //8或10->2
    ls_rtn = uf_Binary2Other(ls_temp, 16) //2->16
   Case 16 //16进制--> 16进制
    ls_rtn = as_num   
  End CHoose  
  
End Choose

Return ls_rtn

//---------------------------------------------------------------
//函数也可以写成:
/*
String ls_rtn
String ls_temp

//源进制数值转换为二进制中间数
ls_temp = uf_Other2Binary(as_num, ai_type1)
//二进制中间数转换目标进制
ls_rtn = uf_Binary2Other(ls_temp, ai_type2)

Return ls_rtn
*/

//***************************************************************************************************************

//-----------------------------------------------------------------//
// 函数名称: uf_Other2Binary
// 功能描述: 其它进制数转换为二进制数
// 作用范围: Public
// 参数说明: as_num:要转换的数值
//      ai_type:原进制类型
// 返 回 值: 转换后的二进制数值
// 使用举例: uf_Other2Binary('255',  10)
//      为将十进制数255转换为2进制数
//-----------------------------------------------------------------//

integer li_i
long ll_num
string ls_rtn

 

//根据目标进制的不同做不同处理
Choose Case ai_type
  
 Case 2 //二进制
  ls_rtn = as_num

 Case 8 //八进制
  For li_i= 1 To len(as_num)
   choose Case mid(as_num, li_i, 1)
    Case "0"
     ls_rtn = ls_rtn + "000"
    Case "1"
     ls_rtn = ls_rtn + "001"
    Case "2"
     ls_rtn = ls_rtn + "010"
    Case "3"
     ls_rtn = ls_rtn + "011"
    Case "4"
     ls_rtn = ls_rtn + "100"
    Case "5"
     ls_rtn = ls_rtn + "101"
    Case "6"
     ls_rtn = ls_rtn + "110"
    Case "7"
     ls_rtn = ls_rtn + "111"
   End choose
  next
  
 Case 10 //十进制
  li_i = long(as_num)
  Do while li_i >= 1
   ls_rtn = string(mod(li_i, 2)) +  ls_rtn
   li_i = (li_i - mod(li_i, 2)) / 2
  Loop 
  
 Case 16 //十六进制
  For li_i= 1 to len(as_num)
   choose Case mid(as_num, li_i, 1)
    Case "0"
     ls_rtn = ls_rtn + "0000"
    Case "1"
     ls_rtn = ls_rtn + "0001"
    Case "2"
     ls_rtn = ls_rtn + "0010"
    Case "3"
     ls_rtn = ls_rtn + "0011"
    Case "4"
     ls_rtn = ls_rtn + "0100"
    Case "5"
     ls_rtn = ls_rtn + "0101"
    Case "6"
     ls_rtn = ls_rtn + "0110"
    Case "7"
     ls_rtn = ls_rtn + "0111"
    Case "8"
     ls_rtn = ls_rtn + "1000"
    Case "9"
     ls_rtn = ls_rtn + "1001"
    Case "a", "A"
     ls_rtn = ls_rtn + "1010"
    Case "b", "B"
     ls_rtn = ls_rtn + "1011"
    Case "c", "C"
     ls_rtn = ls_rtn + "1100"
    Case "d", "D"
     ls_rtn = ls_rtn + "1101"
    Case "e", "E"
     ls_rtn = ls_rtn + "1110"
    Case "f", "F"
     ls_rtn = ls_rtn + "1111"
   End Choose
  Next
   
 Case Else
  ls_rtn = as_num
  MessageBox('提示信息', '不正确的进制参数!')  
  
End Choose

Return ls_rtn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值