10进制数与33进制数的转换

原创 2017年02月08日 17:55:01

10进制数与33进制数的转换

 

      CSDN论坛,有人提出“10进制数与33进制数的转换”,参考网上资料,经修改,得出代码及心得如下:


      一、33进制数格式

      33进制数序列为:1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,V,W,X,Y,Z,0

      注意字母:I、O、U不用。

      二、转换的机制

      1、建立一个ASCII码的对应表(数组),它的下标是ASCII的序列值。数组值是33进制的值。33进制转换10进制时,靠该表由字符对应查询到数值。

      2、建立一个33进制数序列表(数组),它的下标对应33进制数值,数组值是33进制字符。10进制转换33进制时,靠该表由1-33数值对应查询到字符。

      三、实现代码如下:

unit Unit1;

 

interface

uses

  Windows, Messages,SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs,StdCtrls;

 

Type

  TForm1 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Label1: TLabel;

Label2: TLabel;

procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender:TObject);
    procedure Button3Click(Sender:TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
// ACIIS表 由字符对应数字
  Convert: array[0..255] of Integer =
  (-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
   -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
   -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
    33, 1, 2, 3, 4, 5, 6, 7, 8,9,-1,-1,-1,-1,-1,-1,
    -1,10,11,12,13,14,15,16,17,-1,18,19,20,21,22,-1,
   23,24,25,26,27,-1,28,29,30,31,32,-1,-1,-1,-1,-1,
   -1,10,11,12,13,14,15,16,17,-1,18,19,20,21,22,-1,
   23,24,25,26,27,-1,28,29,30,31,32,-1,-1,-1,-1,-1,
   -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
   -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
   -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
   -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
   -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
   -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
   -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
   -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1);
// 数字(下标)对应字符
  Convert2: array[0..33] of AnsiChar =
   ('0','1','2','3','4','5','6','7','8','9','A',
    'B','C','D','E','F','G','H','J','K','L',
    'M','N','P','Q','R','S','T','V','W','X',
     'Y','Z','0');

function IntToHEX33(const V: Int64; constDigits: Integer = -1):string;
const CSTR = '0000000000000000';
var P, P1: PAnsiChar;
    I: Int64;
    NewLen: Integer;
begin
  GetMem(P, 16);
  Move(CSTR, P^, 16);
  P1 := P + 16 - 1;
  I := V;
  while True do
  begin
    P1^ := Convert2[I mod 33];
    I := I div 33;
    if I = 0
      then Break
      else Dec(P1);
  end;
  NewLen := 16 - (P1 - P);
  if NewLen > Digits
    then SetString(Result, P1, NewLen)
    else begin
      P1 := P + 16 - Digits;
      SetString(Result, P1,Digits);
    end;
end;

function HEX33ToInt(const S: string; constDefault: Int64): Int64;
var I: Integer;
    v: Int64;
begin
  Result := 0;
  for I := 1 to length(s) do
  begin
    V := Convert[ord(s[i])];
    if V < 0 then
    begin
      Result := Default;
      Exit;
    end;
    result := (result * 33) + V;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit2.Text := IntToHEX33(StrToInt64Def(Edit1.Text,0));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Edit1.Text :=IntToStr(HEX33ToInt(Edit2.Text, 0));
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  close;
end;

end.

四、界面

34-36进制到10进制的转换 !

  • 2007年07月10日 22:00
  • 407KB
  • 下载

delphi实现十进制与十六进制之间的转化

unit Unit1;  interface  uses      Windows, Messages, SysUtils, Variants, Classes, Graphics, Contr...
  • wozengcong
  • wozengcong
  • 2013年09月19日 23:30
  • 2049

delphi 十六进制转十进制

//需引用Math单元,Decjg 需定义成全局变量function TFrm_Main.HextoDec(s:string):Double;var strlen:integer; Lstr,Rs...
  • baronyang
  • baronyang
  • 2010年03月21日 09:34
  • 3094

10进制数转化成2进制数的四种方法

第一种方法: 第二种方法: 第三种方法: 第四种方法:
  • caihongshijie6
  • caihongshijie6
  • 2013年07月15日 18:37
  • 1633

将十进制数转换为任意进制数

问题:将十进制数转换为任意进制数(2,8,16...).   算法:假如N为输入的数,n为要转换为的进制,若要将十进制231转换为8进制数,过程如下; N              ...
  • qq_15037231
  • qq_15037231
  • 2016年07月22日 20:40
  • 1056

10进制数与33进制数的转换

10进制数与33进制数的转换
  • lyhoo163
  • lyhoo163
  • 2017年02月08日 17:55
  • 722

Delphi进制转换,十进制,二进制,十六进制,字符串--超短精简

  • 2010年06月19日 17:02
  • 1016B
  • 下载

任意进制数之间的转换

#include #include #include /*该函数可以实现小于整型数据的任意进制之间转换*//*以下函数将a进制数s转换成b进制并输出*/void f(int a,int b,char ...
  • KevenJava
  • KevenJava
  • 2006年01月03日 10:50
  • 1298

java将十进制数转换为任意进制数

java十进制转换任意进制的实现
  • Pass_enger
  • Pass_enger
  • 2017年09月27日 16:44
  • 241

中文转换成十六进制编码

  • 2008年10月29日 12:59
  • 35KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:10进制数与33进制数的转换
举报原因:
原因补充:

(最多只允许输入30个字)