求助高手!怎样转换16进制为2进制数。(50分)

  • 主题发起人 主题发起人 dxtian
  • 开始时间 开始时间
D

dxtian

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样转换某个16进制为2进制数据,并取出其中的一个位(bit)。
 
有函数的:HexToBin

help中的说明:

Converts a string of hexadecimal digits to the corresponding binary value.
Unit
Classes
Category

type conversion routines

function HexToBin(Text, Buffer: PChar
BufSize: Integer): Integer

Description

Call HexToBin to convert the hexadecimal string Text to the binary value it represents.

Text is a string representation of a hexadecimal value.

Buffer returns the resulting value in binary.

BufSize is the size of Buffer. Text needs to point to at least 2*BufSize hexadecimal characters, because each two hexadecimal characters represent one byte.

HexToBin returns the number of characters in Buffer that have not been used because Text did not contain valid hexadecimal characters ('0'..'f').

Note: The hexadecimal number must use lower-case characters
HexToBind does not recognize upper-case characters.
 
const MinBase = 2

MaxBase = 36


function NumToStr (num, len, base: Integer
neg: Boolean

fill: char): string

// num = 要转换的数
// len = 生成字符串的最小长度

// base = 进制数 2 = 二进制
// neg = 是否允许负数

// fill = 填充字符用于补满字符串长度//
// 用法:
// NumToStr (45, 8, 2, false, ''0'') > ''00101101''
// NumToStr (45, 4, 8, false, ''0'') > ''0055''
// NumToStr (45, 4, 10, false, '' '') > '' 45''
// NumToStr (45, 4, 16, false, ''0'') > ''002D''
// NumToStr (45, 0, 36, false, '' '') > ''19''
//
var s: string

digit: Integer

begin
num:= ABS (num)

if ((base >= MinBase) and (base <= MaxBase)) then begin
s:= ''''

repeat
digit:= num mod base

if digit < 10 then Insert (CHR (digit + 48), s, 1)
else Insert (CHR (digit + 55), s, 1)

num:= num div base

until num = 0

if neg then Insert (''-'', s, 1)

while Length(s) < len do Insert (fill, s, 1)

end

Result:= s

end


从字符串转换回数:

function StrToNum (const s: string
base: Integer

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 = '' '') do Inc (i)

if neg then begin
case s 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)

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


 
1.hextobin
2.用逻辑与运算 x:= bin and 1
x就是第一位的内容.
 
for i:=0 to 15 do
begin
bitValue:=Num Xor 1;
Num shr 1;
end;
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
915
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部