原來IntToHex是這麼實現的。。。

2021-04-01 16:48:19 字數 1092 閱讀 5585

看delphi自帶的原始碼是如此:

function inttohex(value: integer; digits: integer): string;

//  fmtstr(result, '%.*x', [digits, value]);

a**cmp     edx, 32        //為什麼是edx呢?因為delphi函式的順序是eax,edx,ecx,超過3個就push,所以  edx=digits.

jbe     @a1              //digits小於等於32,跳到@a1

xor     edx, edx   //大於32就 digits := 0;

@a1:    push    esi       //儲存esi

mov     esi, esp     //esp是棧頂指標。

sub     esp, 32      //分配8個區域性變數(32 div 4 = 8)

push    ecx            //返回值得指標

mov     ecx, 16        //   cvtint的引數,0表示signed decimal, 10 or 16 表示unsigned      

call    cvtint          //delphi自己定義的乙個函式,在sysutils單元

mov     edx, esi   //esi是乙個指向轉換後文字的開始位址的指標

pop     eax            // result ptr

call    system.@lstrfrompcharlen     pchar to str的轉換

add     esp, 32     //清除區域性變數

pop     esi           

end;

而分析乙個可執行程式卻發現,原來可以這樣:

c_hexstr='0123456789abcdef';

function tform2.bytetochr(b: byte): char;

begin

result := c_hexstr[b+1];

end;

其實生成隨機密碼也可以用這個原理。

大學原來是這麼美好

人的一生會失去很多東西,有的追逐一生也得不到,有的短暫的擁有卻最終失去!我們一生都在為這些得到與得不到而苦腦 徘徊。我的大學時光也就這樣在揮揮噁噁的荒度了!記得大二時曾看過一部 大學我被你上了 記得當時在圖書館偶然看到這本書的時候,還以為是講一段美妙的大學愛情故事呢,等近不急待的看完了整部 才發現原...

排序演算法原來是這麼排的

常用的排序演算法有以下幾類 插入排序 直接插入排序,希爾排序 選擇排序 簡單選擇排序,堆排序 交換排序 氣泡排序,快速排序 歸併排序,基數排序。排序方法選擇得當與否直接影響程式執行的速度和輔助儲存空間的占有量,進而影響整個軟體的效能。下面對這些演算法一一的介紹他們究竟是怎麼排的。插入排序 直接插入排...

Python原來這麼好學

這是一本教同學們徹底學通python,徹底掌握python的高質量學習教程。本教程一共二十五章,透徹地講解從初級到高階的所有知識點。在本場 chat 中,會講到如下內容 計算機的基礎知識,主要講解計算機的資訊表示,計算機的組成結構。python的基礎知識,主要講解python的基礎語法,基礎資料型別...