Delphi - 简单10进制转2进制的函数
技术交流,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.