我再来回答一遍吧,哈哈。
对于你的情况,是把一个ASC字符转成32进制吧。
那么先规定三十二进制的数字字符是从0..9和A..V共32个字符。
每个asc字符肯定对应两个三十二进制的数字字符。
程序如下:
function CharAscToChar32(ACharAsc: Char):String; //Asc字符转换成32进制
const
ConvertTable: Array [0..31] of Char =('0','1',...,'9','A','B','C',...,'V');
//中间省略的部分自己敲,我懒得敲。
begin
Result := ConvertTable[BYTE(ACharAsc) div 32];
Result := Result + ConvertTable[BYTE(ACharAsc) mod 32];
end;function Char32ToCharAsc(AChar32: String):Char; //32进制转换成Asc字符
const
NumSet: set of Char = ['0'..'9'];
CapsSet: set of Char = ['A'..'V'];
var
Res: BYTE;
begin
Result := #0;
if Length(AChar32)<>2 then begin
raise Exception.Create('输入的32位数字不合法');
Exit;
end;
Res := 0;
if AChar32[1] in NumSet then
Res := (BYTE(AChar32[1]) - BYTE('0'))*32
else if AChar32[1] in CapsSet then
Res := (BYTE(AChar32[1]) - BYTE('A') + 10)*32 //因为条件不可能满足,所以这一行永远不会执行。
else begin
raise Exception.Create('输入的32位数字不合法');
Exit;
end;
if AChar32[2] in NumSet then
Res := Res + (BYTE(AChar32[2]) - BYTE('0'))
else if AChar32[2] in CapsSet then
Res := Res + (BYTE(AChar32[2]) - BYTE('A') + 10)
else begin
raise Exception.Create('输入的32位数字不合法');
Exit;
end;
Result := Char(Res);
end;
对于你的情况,是把一个ASC字符转成32进制吧。
那么先规定三十二进制的数字字符是从0..9和A..V共32个字符。
每个asc字符肯定对应两个三十二进制的数字字符。
程序如下:
function CharAscToChar32(ACharAsc: Char):String; //Asc字符转换成32进制
const
ConvertTable: Array [0..31] of Char =('0','1',...,'9','A','B','C',...,'V');
//中间省略的部分自己敲,我懒得敲。
begin
Result := ConvertTable[BYTE(ACharAsc) div 32];
Result := Result + ConvertTable[BYTE(ACharAsc) mod 32];
end;function Char32ToCharAsc(AChar32: String):Char; //32进制转换成Asc字符
const
NumSet: set of Char = ['0'..'9'];
CapsSet: set of Char = ['A'..'V'];
var
Res: BYTE;
begin
Result := #0;
if Length(AChar32)<>2 then begin
raise Exception.Create('输入的32位数字不合法');
Exit;
end;
Res := 0;
if AChar32[1] in NumSet then
Res := (BYTE(AChar32[1]) - BYTE('0'))*32
else if AChar32[1] in CapsSet then
Res := (BYTE(AChar32[1]) - BYTE('A') + 10)*32 //因为条件不可能满足,所以这一行永远不会执行。
else begin
raise Exception.Create('输入的32位数字不合法');
Exit;
end;
if AChar32[2] in NumSet then
Res := Res + (BYTE(AChar32[2]) - BYTE('0'))
else if AChar32[2] in CapsSet then
Res := Res + (BYTE(AChar32[2]) - BYTE('A') + 10)
else begin
raise Exception.Create('输入的32位数字不合法');
Exit;
end;
Result := Char(Res);
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货