`
isiqi
  • 浏览: 16497192 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

进制转化的通用函数

阅读更多
 进制转化的通用函数(绝对精彩)
//====================================================================
// [FUNCTION]  : gf_convertnumsys()
// [RETURNS]   : string 
// [ARGEMENTS] : 
//  value integer ai_value  需要转化的10进制数 
//  value integer ai_how    转化方式(共3种: 2,8,16)
//--------------------------------------------------------------------
// [DESCRIPTION]: 把10进制转化成2,8,16进制(10进制数必须大于零)
//--------------------------------------------------------------------
// [AUTHOR INFO]  : DoItNow  Date: 2003.05.21
// [MODIFIER INFO]: 
// 
//--------------------------------------------------------------------
// Copyright (C) saccsoft.com(TM) 2003, All rights reserved
//====================================================================

String two,sixteen,eight //定义三个字符串变量,用来存放最后输出的进制值
String ls_return
Long lentwo,duan,i,j
String aa[50],a[50],b[4] 

//====================================================================
// 先把10进制数据通过取余数转换成2进制
// 10进制到2进制的转换是通过取余数实现
//====================================================================
DO WHILE ai_value > 0
 two = two + String(Mod(ai_value,2))
 ai_value = ai_value / 2
LOOP


//====================================================================
// 选择输出进制
//====================================================================
CHOOSE CASE ai_how
 CASE 2 
  //由于上面得到的2进制的数据方向是相反的:11011101101,所以要通过reverse()函数重新//把它颠倒过来
  two = Reverse(two) //得到正确的2进制10110111011
  ls_return= two
 CASE 8 
  //2进制到8进制的转换是这样的,从右往左每3位为一个段,即8进制的一位,
  lentwo = Len(two) //取2进制的长度
  IF Mod(lentwo,3) > 0 THEN //分段
   duan = lentwo / 3 + 1
  ELSE
   duan = lentwo /3
  END IF
  FOR i = duan TO 1 STEP -1 //由于没有颠倒过来的2进制是从右往左的,所以//分出来的段从左往右就是由大到小
   aa[duan] = Mid(two,i * 3 - 2 ,3) //取出每一段的2进制值
   a[duan] = '0'
   FOR j = 1 TO 3
    b[j] = Mid(aa[duan],j,1) //每一段从右往左取值
    IF b[j] <> '' THEN
     a[duan] = String(Integer(a[duan]) + 2^(j -1 ) * Integer(b[j]))
     //按照2^0 * x + 2^1 *x +2^2 * x
     //x为分别为从右到左的2进制的值,累加得到每一段的8进制值
    END IF
   NEXT
   eight = eight + a[duan] //8进制段累加得到最后的8进制值
  NEXT
  ls_return= eight
 CASE 16 
  //16进制的方法如同8进制,只是每4位为一段而已
  lentwo = Len(two)
  IF Mod(lentwo,4) > 0 THEN
   duan = lentwo / 4 + 1
  ELSE
   duan = lentwo /4
  END IF
  FOR i = duan TO 1 STEP -1
   aa[duan] = Mid(two,i * 4 - 3 ,4)
   a[duan] = '0'
   FOR j = 1 TO 4
    b[j] = Mid(aa[duan],j,1)
    IF b[j] <> '' THEN
     a[duan] = String(Integer(a[duan]) + 2^(j -1 ) * Integer(b[j]))
    END IF
    CHOOSE CASE Integer(a[duan])
     CASE 10
      a[duan] = 'A'
     CASE 11
      a[duan] = 'B'
     CASE 12
      a[duan] = 'C'
     CASE 13
      a[duan] = 'D'
     CASE 14
      a[duan] = 'E'
     CASE 15
      a[duan] = 'F'
    END CHOOSE
   NEXT
   sixteen = sixteen + a[duan]
  NEXT
  ls_return= sixteen
 CASE ELSE
END CHOOSE

RETURN ls_return

 
 
分享到:
评论

相关推荐

    十进制转化各个进制的通用代码

    ### 十进制转换为其他进制的通用代码解析 #### 概述 本文将详细介绍一个用于实现十进制数转换为二进制、八进制及十六进制的Java程序。该程序通过一个通用的方法`trans`来完成转换工作,并在主方法`main`中调用针对...

    十进制转化为二进制_八进制_十六进制代码 C#代码

    例如,你可以创建一个通用的函数,接收一个整数和目标基数作为参数: ```csharp public string ConvertToBase(int number, int baseValue) { if (baseValue || baseValue &gt; 36) { throw new ArgumentException(...

    Delphi实现把10进制转换成16进制的函数进制转化_.docx

    在 Delphi 中,进行进制转换是常见的编程需求,尤其是将10进制转换为16进制。Delphi 自带的 `SysUtils` 单元提供了 `IntToHex` ...此外,还可以考虑将这些函数封装在一个通用的进制转换库中,以便在多个项目中复用。

    SQL脚本函数 16进制转换为10进制

    ### SQL脚本函数:16进制转换为10进制 #### 背景介绍 在数据库管理和软件开发过程中,经常需要处理不同进制之间的数值转换问题。尤其是在处理网络协议、加密算法或是数据存储格式时,十六进制与十进制之间的转换...

    stm32标准库进制转换.rar

    - HAL库通常不直接提供进制转换的函数,因为这是通用的数学操作,不在其硬件抽象层的职责范围内。然而,我们可以利用C语言内置的函数或者自定义函数来实现。 - `printf` 和 `scanf` 函数:C语言标准库中的`printf`...

    栈的应用3——进制转化_栈;进制转换_

    在实际编程中,为了增强程序的可读性和复用性,可以封装一个通用的进制转换函数,该函数接受输入数值、源进制和目标进制作为参数,然后根据不同的进制关系进行相应的转换。 总结来说,栈在进制转换中的应用展示了其...

    16位二进制转化为BCD码.zip_16bit bcd_16位bcd码_16位bcd码范围_verilog_二进制 BCD

    标题中的“16位二进制转化为BCD码”指的是一个功能,该功能能够将16位的二进制数转换为等值的BCD码。16位二进制数的范围是0000000000000000到1111111111111111,对应十进制数的范围是0到65535。在BCD编码中,每四位...

    进制转化的问题,包括普通进制之间转换

    也就是任意输入十进制数字,程序能自动将其转化为另外的数制表示的值,例如:  输入: 130 (十进制)  输出: 10000010 (二进制) 输出: 202 (八进制) 输出: 82 (十六进制)  1、从程序算法的优化程度...

    进制转化器

    这个特定的进制转化器是使用C++编程语言编写的,并且利用了Microsoft Foundation Classes (MFC)库,这是一个由微软提供的C++类库,主要用于开发Windows图形用户界面应用程序。在本文中,我们将深入探讨C++、MFC以及...

    十进制到任意进制的转换代码

    在实际编程中,Python内置的`bin()`, `oct()`, 和`hex()`函数可以直接将十进制数转换为二进制、八进制和十六进制字符串,但它们不支持2到36之间的任意进制。因此,自定义的`decimal_to_n_base`函数在处理这类需求时...

    c#进制的转换

    通过这个函数,你可以轻松地在各种进制之间转换。 总之,理解并熟练掌握不同进制之间的转换是每位C#开发者的基本功。通过练习和实践,初学者可以更好地理解这些概念,并将其应用到更复杂的编程任务中。在实际项目中...

    数字转化(含小数转化为2进制,2进制与10进制的互换)

    它们在执行某些特定功能,如通用函数(GeneralFunctionOfXp.dll)或运行时库支持(如MSVCP60D.DLL和MSVCRTD.DLL)时起作用。 综上所述,这个工具“NumberConvert.exe”可能是用来帮助用户进行复杂的数字转换,尤其...

    c语言编程题:从键盘输入一个十进制数,将其转换为二进制、八进制和十六进制数,并同时输出。

    - 调用 `showbit`, `showoct`, `showhex` 函数,分别显示该整数的二进制、八进制和十六进制形式。 ### 四、代码优化建议 虽然给定的代码能够实现题目要求的功能,但在实际应用中还存在一些可优化的空间: - **格式...

    数据结构论文设计-进制间的转化

    ### 数据结构论文设计—进制间的转化 #### 概述 在计算机科学中,不同的进制转换是一项基本而重要的技能。本篇文章将详细介绍如何利用两种常见的数据结构——堆栈(Stack)和队列(Queue)来进行不同进制之间的...

    MFC实现10进制、2进制、16 进制和ASCII码间的相互转换

    2进制(Binary)是计算机内部存储和运算的基础,所有数据最终都会被转化为二进制形式。16进制(Hexadecimal)则是一种更便于人类阅读的二进制表示方式,因为它将每4位二进制数(1字节)转换为一个十六进制数,简化了...

    c#智能进制转换器 十进制,二进制,八进制,十六进制

    转化为另外的数制表示的值,例如:  输入: 130 (十进制)  输出: 10000010 (二进制) 输出: 202 (八进制) 输出: 82 (十六进制)  1、从程序算法的优化程度、程序的通用性、程序的规范性来评判; ...

    Java把十进制转成二进制(任意进制)的程序

    你可以使用这个函数来将十进制数转换为任意进制,例如: ```java int decimal = 42; int customBase = 7; String customBaseString = convertToCustomBase(decimal, customBase); System.out.println...

    顺序栈、链栈将10进制转为2、8、16进制源码

    在C++中,实现这些转换可以定义一个通用的函数,接受基数作为参数。这个函数会创建一个栈,然后对10进制数不断除以基数取余,余数压栈,直到商为0。最后,栈顶元素即为最高位,依次出栈得到结果。 "transData.cpp...

    汉字转换16进制

    - 将汉字字符串转换为二进制数据,可能用到`WideCharToMultiByte`函数,以获取UTF-8或GBK编码的字节序列。 - 将二进制数据转换为16进制字符串,可能通过遍历字节序列并逐个转换为16进制数字完成。 6. **实践应用*...

    数据结构实验报告2.docx

    6. **进制转化**:`zhuanhua(SqStack &S, int N, int n)`是核心算法,接收十进制整数n和目标进制数N,通过不断将n除以N取余并入栈,直至n变为0,然后依次出栈并输出结果,即可得到N进制表示。 7. **清空栈**:`...

Global site tag (gtag.js) - Google Analytics