技术交流,DH讲解.
昨晚半夜1点多,有个朋友来问这个问题.想了下,先打算偷懒,让他先用IntToHex转16进制,然后1位16进制对应4位二进制.
后来想了下这样做,太不该了.于是自己随手写了个函数:
我们只要对位运算熟悉就可以了,我们一位一位的去判断是0还是1就可以了.
为了避免String引起的效率问题,我们直接用Array[0..31] of Char.
Type
TBinString = Array[ 0..31 ] Of Char ;
Function IntToBin( N: Integer ): TBinString ;
Const
BinCharArr: Array[ 0..1 ] Of Char = ( '0', '1' ) ;
Var
I: Integer ;
Begin
For I := 0 To 32 - 1 Do
Begin
Result[ 31 - I ] := BinCharArr[ N And 1 ] ;
N := N Shr 1 ;
End ;
End ;
汇编版本
type
TBinString = array[0..31] of AnsiChar;
function Int2Bin(n:Integer):TBinString ;
asm
push edx //将result保存一下
mov ecx,$1F
@@nLoop:
cmp ecx , 0
jl @@nExit
bt eax,ecx
jc @@n1
mov byte ptr [edx],'0'
jmp @@nNext
@@n1:
mov Byte ptr [edx],'1'
@@nNext:
inc edx
dec ecx
jmp @@nLoop
@@nExit:
pop edx
mov eax,edx
end;
代码很短.就这么个意思吧.
我是DH.