Delphi与汇编学习4(两个转16进制的函数)
来源:互联网 发布:网络推广策划案 编辑:程序博客网 时间:2024/06/10 01:10
Delphi与汇编学习4(两个转16进制的函数)由于在工作中需要,用汇编写了一个字符串转16进制的函数,有详细注释,应该对想学习的人有所帮助的。呵呵
DelphiCode: {功能:字符串转16进制 作者:不得闲} function StrToHex(Const str: string): string; asm push ebx push esi push edi test eax,eax jz @@Exit mov esi,edx //保存edx值,用来产生新字符串的地址 mov edi,eax //保存原字符串 mov edx,[eax-4] //获得字符串长度 mov ecx,edx //保存长度 Push ecx add edx,edx mov eax,esi call System.@LStrSetLength //设置新串长度 mov eax,esi //新字符串地址 Call UniqueString //产生一个唯一的新字符串,串位置在eax中 Pop ecx @@SetHex: xor edx,edx //清空edx mov dl, [edi] //Str字符串字符 mov ebx,edx //保存当前的字符 shr edx,4 //右移4字节,得到高8位 mov dl,byte ptr[edx+@@HexChar] //转换成字符 mov [eax],dl //将字符串输入到新建串中存放 and ebx,$0F //获得低8位 mov dl,byte ptr[ebx+@@HexChar] //转换成字符 inc eax //移动一个字节,存放低位 mov [eax],dl inc edi inc eax loop @@SetHex @@Exit: pop edi pop esi pop ebx ret @@HexChar: db '0123456789ABCDEF' end; 在群中,有人说要指针转16进制的函数,其实字符串本身就是按照指针的形式保存的,所以稍微修改一下就是指针区信息转16进制的函数了如下: {功能:指针区信息转16进制 参数: Ptr指定指针,Len指定取得的数据长度 作者:不得闲} function PointToHex(Const Ptr: pointer;Const Len: integer): string; asm Push ebx push esi push edi test eax,eax jz @@Exit mov edi,eax mov esi,ecx mov ecx,edx push ecx add edx,edx mov eax,esi call System.@LStrSetLength //设置新串长度 mov eax,esi //新字符串地址 Call UniqueString //产生一个唯一的新字符串,串位置在eax中 pop ecx @@SetHex: xor edx,edx //清空edx mov dl, [edi] //Str字符串字符 mov ebx,edx //保存当前的字符 shr edx,4 //右移4字节,得到高8位 mov dl,byte ptr[edx+@@HexChar] //转换成字符 mov [eax],dl //将字符串输入到新建串中存放 and ebx,$0F //获得低8位 mov dl,byte ptr[ebx+@@HexChar] //转换成字符 inc eax //移动一个字节,存放低位 mov [eax],dl inc edi inc eax loop @@SetHex @@Exit: pop edi pop esi pop ebx ret @@HexChar: db '0123456789ABCDEF' end; 使用比如: var Stream:TMemoryStream; s: String; i: integer; begin Stream := TMemoryStream.Create; s := '不得闲'; i := 511; Stream.WriteBuffer(pointer(s)^,Length(s)); ShowMessage(PointToHex(Stream.Memory,Stream.size)); Stream.free;
这样就把整个Stream都转换成16进制了.
- Delphi与汇编学习4(两个转16进制的函数)
- Delphi的字符串与16进制的相互转换函数的汇编代码
- 初学 Delphi 嵌入汇编[16] - 进制的表示方法
- Delphi两个有用的函数
- delphi 两个有意思的函数
- delphi 两个有意思的函数
- Delphi 嵌入汇编学习
- Delphi与汇编asm
- delphi与汇编
- Delphi与汇编
- Delphi与汇编
- Delphi读写XML的两个函数
- Delphi:两个高效的哈希函数
- 初学 Delphi 嵌入汇编[3] - 第一个 Delphi 与汇编的例子
- Delphi中使用汇编(关于POS函数的问题)
- Delphi与汇编笔记(3)------关于参数的传递
- 汇编学习笔记--数据处理的两个基本问题
- [汇编学习笔记][第八章数据处理的两个基本问题]
- Eclipse快捷键大全
- CAP:高可用架构的另一基石
- 如何读书?读什么样的书? 摘自《致青年朋友》
- 对Agile Simple Design的理解
- WinForm程序,保证只有一个实例在运行(网上搜集的东西)
- Delphi与汇编学习4(两个转16进制的函数)
- 将16进制字符串转化成内存二进制数据
- 加密技术概念
- 软件版本
- 读书之乐 摘自《致青年朋友》
- 总结JSP与servlet之间的传值
- [转贴]ParameterizedThreadStart,ThreadStart的使用,线程Thread传参数
- SVN服务器配置之 在Solaris9上安装apache
- 程序员保持身心健康的八种方式