for example:
'1100'->'c'
'1100'->'c'
解决方案 »
- TEncoding,D7下怎么写,高手来。
- 在线程里面声明一个控件对象,提示“尚未调用CoInitialize”问题,求助大家
- “FreeOnTerminate := True;” 但线程执行结束后为什么没有释放?
- 我用data module层做的程序如何在没有DELPHI的机器上运行?
- 佛说金刚般若波罗密经
- ☆★☆★哪位仁兄有《Delphi in nutshell》这本书的中文电子版啊???★☆★☆
- 如何获取ftp目录下文件的图标呢
- 怎么隐藏MDI中的子窗口???急。
- 谁有做过关于销售管理(或客户关系管理)方面的软件呢????
- 请教:ISAPI如何同时返回图象和文字
- 大家帮忙,一个有关BookMark的问题?
- database
neg: Boolean; max: Integer): Integer;
// s = 要转换的字符串
// base = 进制数
// neg = 是否为负数// max = 要转换的最大数//
// 用法:
// i:= StrToNum (''00101101'', 2, false, MaxInt);
// i:= StrToNum (''002D'', 16, false, MaxInt);
// i:= StrToNum (''-45'', 10, true, MaxInt);
// i:= StrToNum (''ZZ'', 36, true, MaxInt);
//
var negate, done: Boolean;
i, ind, len, digit, mmb: Integer;
c: Char;
mdb, res: Integer;
begin
res:= 0; i:= 1; digit:= 0;
if (base >= MinBase) and (base <= MaxBase) then begin
mmb:= max mod base;
mdb:= max div base;
len:= Length (s);
negate:= False;
while (i <= len) and (s[i] = ' ') do Inc (i);
if neg then begin
case s[i] of
'+': Inc (i);
'-': begin Inc (i); negate:= TRUE; end;
end; (* CASE *)
end; (* IF neg *)
done:= len > i;
while (i <= len) and done do begin
c:= Upcase (s[i]);
case c of
'0'..'9': digit:= ORD(c) - 48;
'A'..'Z': digit:= ORD(c) - 55;
else done:= FALSE
end; (* CASE *)
done:= done and (digit < base);
if done then begin
done:= (res < mdb) or ((res = mdb) and (digit <= mmb));
IF done then begin
res:= res * base + digit;
Inc (i);
end; (* IF done *)
end; (* IF done *)
end; (* WHILE *)
if negate then res:= - res;
end; (* IF done *)
Result:= res;
end;
var
vD : Byte;
I : Integer;
vHextStr : String;
vP : PChar;
vLen : Integer;
begin
vLen := Length(ABitStr);
if vLen mod 4 > 0 then SetLength(vHextStr, vLen div 4 + 1)
else SetLength(vHextStr, vLen div 4); //初始化
vD := 0;
vP := PChar(ABitStr);
I := 0; //开始计数
vLen := 0; while vP^ <> #0 do
begin
vD := vD shl 1; if vP^ = '1' then vD := vD + 1; Inc(vP);
Inc(I); if I = 4 then
begin
Inc(vLen);
case vD of
0..9 : vHextStr[vLen] := Chr(vD + $30);
10..15 : vHextStr[vLen] := Chr(vD - 10 + $41);
end; I := 0;
vD := 0;
end;
end; if I > 0 then
begin
Inc(vLen);
case vD of
0..9 : vHextStr[vLen] := Chr(vD + $30);
10..15 : vHextStr[vLen] := Chr(vD + $41);
end;
end; Result := vHextStr;
end;