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

您所在的位置:网站首页 10进制转16进制对照表图解大全 10进制数与33进制数的转换

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

2024-07-13 15:35| 来源: 网络整理| 查看: 265

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.

四、界面

---------------------  作者:lyhoo163  来源:CSDN  原文:https://blog.csdn.net/lyhoo163/article/details/54929751  版权声明:本文为博主原创文章,转载请附上博文链接!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3