将16进制字符串转化成内存二进制数据
在使用Ini文件的时候,发现不能向Ini文件中写入流数据。于是想了一种方法来写入流数据,其中用到了内存数据转16进制,和16进制转成
内存二进制数据,前面的内存数据转16进制的已经写过,可以看看我以前发的一个函数。今天把16进制转二进制的函数发上来,以供大家参考一下,希望能写出效率更高的转换函数来。
- {*************************************************************}
- {* 名称: HexToBin *}
- {* 功能: 将16进制字符串转换成二进制信息存入 *}
- {* 作者: 不得闲 *}
- {* 联系方式:suiyunonghen@gmail.com *}
- {* 时间: 2008-08-02 *}
- {* 用法: *}
- {* Mem := TMemoryStream.Create; *}
- {* Mem.SetSize(100); *}
- {* str := '不得闲'; *}
- {* writeSize := HeToBin(strToHex(Str),Mem.Memory,4); *}
- {*************************************************************}
- function HexToBin(HexStr: string;BinnryBuf: pointer;BufSize: integer): integer;
- asm
- push ebx
- push edi
- Push ecx
- mov edi,ecx
- test eax,eax
- Jz @@Exit
- test edx,edx
- Jz @@Exit
- test ecx,ecx
- Jz @@Exit
- mov edi,[eax-4]
- shr edi,1 //长度除2获得二进制实际长度
- cmp edi,ecx //比较实际长度和给定长度
- JB @@Belive //给定长度大于实际长度,直接执行,否则使用给定长度
- mov edi,ecx //使用给定长度
- @@Belive:
- xor ecx,ecx
- mov bh,[eax] //字符
- cmp bh,'0' //查看是否在0到f之间的字符
- JB @@Exit //小于0
- cmp bh,'f'
- JA @@Exit //大于f跳
- sub bh,'0'
- mov cl,bh
- mov bh,byte ptr[ecx+@@Convert]
- shl bh,4
- xor ecx,ecx
- inc eax //指针前移
- mov bl,[eax]
- cmp bl,'0' //查看是否在0到f之间的字符
- JB @@Exit //小于0
- cmp bl,'f'
- JA @@Exit //大于f跳
- sub bl,'0'
- mov cl,bl
- mov bl,byte ptr[ecx+@@Convert]
- xor ecx,ecx
- mov cl,bh
- and ebx,00FFh
- add ebx,ecx
- mov [edx],ebx
- inc eax
- inc dx
- dec edi
- JNZ @@Belive
- @@Exit:
- Pop eax
- sub eax,edi
- pop edi
- pop ebx
- ret
- @@Convert: //包含大小写的ABCDEF数组列
- DB 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1
- DB -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1
- DB -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
- DB -1,10,11,12,13,14,15
- end;
将16进制字符串转化成内存二进制数据相关推荐
- iOS 将16进制字符串转换成UIColor
#pragma mark - 将16进制字符串转换成 UIColor - (UIColor *)generateColorObjectWithHex:(NSString *)hexString { u ...
- 16进制字符串转成字节数组、字节数组转16进制字符串、16进制字符串转成2进制字符串、中英文 字符串转16进制、16进制转换成中英文 字符串
因为需要与硬件相互通讯 用到了这些方法 亲测可用 /*** 16进制表示的字符串 转换为字节数组** @param hexString 16进制表示的字符串* @return byte[] 字节数组* ...
- QString将16进制字符串转换成10进制字符串(16进制IP地址的转换显示)
现在读到有一个IP地址:EF80C70A(0A->10,C7->199,80->128,EF->239),以字符串的形式读出到QString中.现在要将其转化为10.199.1 ...
- 16进制转double dotnet_IEEE 16进制字符串转化为double类型
因项目需要,需要将内存中的64位16进制字符串表示成double.如下: #include #include #include #include #include using namespace st ...
- qt 中文转十六进制_QT中16进制字符串转汉字
最经在研究AT指令接受短信,短信是unicode编码,接受后需要根据系统的编码方案进行相关的转码 比如接受到了一串字符4F60597D,它是"你好"的unicode编码,一个uni ...
- c语言 bcd码 16进制字符串 原理,ASCII码、HEX、字符、BCD 等等 基础知识思考
每每遇到这些问题就要想个半天,想不明白还不舒服,今天特别把所想整理下避免以后再次进入思想漩涡!!! 计算机存储和传输都是以字节为单位 1 bit = 1 二进制数据 1 byte = 8 ...
- 二进制数据与16进制字符串相互转化方法
二进制数据转化为16进制字符串(中间加的':'还有':'是为了查看下标,也可以自行去掉): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public st ...
- C语言之10/16进制字符串和数字转换(四)
#include <stdio.h> #include <stdlib.h>int main() {//1.将10进制和16进制字符串转换成数字char a[] = " ...
- 用JavaScript写代码将硬盘序列号从16进制字符串转换为ASCII字符串,兼谈EditPlus和Edge浏览器对JavaScript脚本支持的一点差别
之前写的系统信息收集报告程序SysInfo的一个功能就是收集并报告系统中的硬盘序列号.在之前的测试中这项功能表现不错,但前两天用SysInfo收集一台电脑的信息时,显示的硬盘序列号与其它硬盘序列号读取 ...
最新文章
- 体绘制(Volume Rendering)概述介绍
- 微服务架构,多“微”才合适?
- Tomcat 的 Server 文件配置详解
- windows下sublime通过sftp扩展上传文件到linux服务器上
- 随想录(zynq学习)
- [翻译]禅与文件和文件夹组织的艺术 上
- JavaFX Dialogs (官方支持)
- ABB变频器ACS 310-通讯协议
- word2016中的毕设论文——页眉页脚相关设置及页眉横线的删除
- win10 myeclipse2017安装教程(附安装包)
- 小学校本课程计算机前言,《创意手工》三河小学校本课程——序言
- 高斯——拉盖尔积分法和高斯——勒让德积分法求积分
- 电脑JAVA打开oracle太慢_oracle官网下载jdk跑不动太慢了,给出快速下载方式mac
- 【Unity】优化工具Profiler
- 【面经】2021 中国农业银行 笔试编程题
- PPT放映时不能全屏播放解决方法
- 正负数在计算机中的存储方式
- 散点图 计算 java_怎么在excel中计算散点图的公式
- Android自定义组件之ListPopWindow
- 证明完全立方数模9同余_牡丹江2立方玻璃钢蓄水池报价