在使用Ini文件的时候,发现不能向Ini文件中写入流数据。于是想了一种方法来写入流数据,其中用到了内存数据转16进制,和16进制转成
内存二进制数据,前面的内存数据转16进制的已经写过,可以看看我以前发的一个函数。今天把16进制转二进制的函数发上来,以供大家参考一下,希望能写出效率更高的转换函数来。

  1. {*************************************************************}
  2. {*    名称: HexToBin                                        *}
  3. {*    功能: 将16进制字符串转换成二进制信息存入              *}
  4. {*    作者: 不得闲                                          *}
  5. {*    联系方式:suiyunonghen@gmail.com                       *}
  6. {*    时间: 2008-08-02                                      *}
  7. {*    用法:                                                 *}
  8. {*        Mem := TMemoryStream.Create;                       *}
  9. {*        Mem.SetSize(100);                                  *}
  10. {*        str := '不得闲';                                   *}
  11. {*       writeSize := HeToBin(strToHex(Str),Mem.Memory,4);   *}
  12. {*************************************************************}
  13. function HexToBin(HexStr: string;BinnryBuf: pointer;BufSize: integer): integer;
  14. asm
  15. push  ebx
  16. push  edi
  17. Push  ecx
  18. mov   edi,ecx
  19. test  eax,eax
  20. Jz    @@Exit
  21. test  edx,edx
  22. Jz    @@Exit
  23. test  ecx,ecx
  24. Jz    @@Exit
  25. mov   edi,[eax-4]
  26. shr   edi,1   //长度除2获得二进制实际长度
  27. cmp   edi,ecx   //比较实际长度和给定长度
  28. JB    @@Belive  //给定长度大于实际长度,直接执行,否则使用给定长度
  29. mov   edi,ecx   //使用给定长度
  30. @@Belive:
  31. xor   ecx,ecx
  32. mov   bh,[eax] //字符
  33. cmp   bh,'0'   //查看是否在0到f之间的字符
  34. JB    @@Exit   //小于0
  35. cmp   bh,'f'
  36. JA    @@Exit   //大于f跳
  37. sub   bh,'0'
  38. mov   cl,bh
  39. mov   bh,byte ptr[ecx+@@Convert]
  40. shl   bh,4
  41. xor   ecx,ecx
  42. inc   eax     //指针前移
  43. mov   bl,[eax]
  44. cmp   bl,'0'   //查看是否在0到f之间的字符
  45. JB    @@Exit   //小于0
  46. cmp   bl,'f'
  47. JA    @@Exit   //大于f跳
  48. sub   bl,'0'
  49. mov   cl,bl
  50. mov   bl,byte ptr[ecx+@@Convert]
  51. xor   ecx,ecx
  52. mov   cl,bh
  53. and   ebx,00FFh
  54. add   ebx,ecx
  55. mov   [edx],ebx
  56. inc   eax
  57. inc   dx
  58. dec   edi
  59. JNZ  @@Belive
  60. @@Exit:
  61. Pop   eax
  62. sub   eax,edi
  63. pop   edi
  64. pop   ebx
  65. ret
  66. @@Convert:  //包含大小写的ABCDEF数组列
  67. DB  0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1
  68. DB  -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1
  69. DB  -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  70. DB  -1,10,11,12,13,14,15
  71. end;

将16进制字符串转化成内存二进制数据相关推荐

  1. iOS 将16进制字符串转换成UIColor

    #pragma mark - 将16进制字符串转换成 UIColor - (UIColor *)generateColorObjectWithHex:(NSString *)hexString { u ...

  2. 16进制字符串转成字节数组、字节数组转16进制字符串、16进制字符串转成2进制字符串、中英文 字符串转16进制、16进制转换成中英文 字符串

    因为需要与硬件相互通讯 用到了这些方法 亲测可用 /*** 16进制表示的字符串 转换为字节数组** @param hexString 16进制表示的字符串* @return byte[] 字节数组* ...

  3. QString将16进制字符串转换成10进制字符串(16进制IP地址的转换显示)

    现在读到有一个IP地址:EF80C70A(0A->10,C7->199,80->128,EF->239),以字符串的形式读出到QString中.现在要将其转化为10.199.1 ...

  4. 16进制转double dotnet_IEEE 16进制字符串转化为double类型

    因项目需要,需要将内存中的64位16进制字符串表示成double.如下: #include #include #include #include #include using namespace st ...

  5. qt 中文转十六进制_QT中16进制字符串转汉字

    最经在研究AT指令接受短信,短信是unicode编码,接受后需要根据系统的编码方案进行相关的转码 比如接受到了一串字符4F60597D,它是"你好"的unicode编码,一个uni ...

  6. c语言 bcd码 16进制字符串 原理,ASCII码、HEX、字符、BCD 等等 基础知识思考

    每每遇到这些问题就要想个半天,想不明白还不舒服,今天特别把所想整理下避免以后再次进入思想漩涡!!! 计算机存储和传输都是以字节为单位 1 bit     = 1  二进制数据 1 byte  = 8  ...

  7. 二进制数据与16进制字符串相互转化方法

    二进制数据转化为16进制字符串(中间加的':'还有':'是为了查看下标,也可以自行去掉): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public st ...

  8. C语言之10/16进制字符串和数字转换(四)

    #include <stdio.h> #include <stdlib.h>int main() {//1.将10进制和16进制字符串转换成数字char a[] = " ...

  9. 用JavaScript写代码将硬盘序列号从16进制字符串转换为ASCII字符串,兼谈EditPlus和Edge浏览器对JavaScript脚本支持的一点差别

    之前写的系统信息收集报告程序SysInfo的一个功能就是收集并报告系统中的硬盘序列号.在之前的测试中这项功能表现不错,但前两天用SysInfo收集一台电脑的信息时,显示的硬盘序列号与其它硬盘序列号读取 ...

最新文章

  1. 体绘制(Volume Rendering)概述介绍
  2. 微服务架构,多“微”才合适?
  3. Tomcat 的 Server 文件配置详解
  4. windows下sublime通过sftp扩展上传文件到linux服务器上
  5. 随想录(zynq学习)
  6. [翻译]禅与文件和文件夹组织的艺术 上
  7. JavaFX Dialogs (官方支持)
  8. ABB变频器ACS 310-通讯协议
  9. word2016中的毕设论文——页眉页脚相关设置及页眉横线的删除
  10. win10 myeclipse2017安装教程(附安装包)
  11. 小学校本课程计算机前言,《创意手工》三河小学校本课程——序言
  12. 高斯——拉盖尔积分法和高斯——勒让德积分法求积分
  13. 电脑JAVA打开oracle太慢_oracle官网下载jdk跑不动太慢了,给出快速下载方式mac
  14. 【Unity】优化工具Profiler
  15. 【面经】2021 中国农业银行 笔试编程题
  16. PPT放映时不能全屏播放解决方法
  17. 正负数在计算机中的存储方式
  18. 散点图 计算 java_怎么在excel中计算散点图的公式
  19. Android自定义组件之ListPopWindow
  20. 证明完全立方数模9同余_牡丹江2立方玻璃钢蓄水池报价

热门文章

  1. 业界最全的Redis可视化工具横向评测
  2. 《动手学机器人学》7.3.1齐次坐标变换齐次变换矩阵
  3. 三相永磁同步电机无速度传感器控制仿真模型笔记
  4. 计算机三级数据库技术知识点
  5. 莱利:韦德詹皇都将在热火退役 四巨头如白日梦
  6. 反射型xss测试(owasp)
  7. 如何让Android开机不锁屏
  8. jeecg 从一个Tab页跳转到另一个Tab页
  9. Arduino实验之两位数码管实验报告
  10. 四种常见的 POST-- content-type数据提交方式