很喜欢Delphi 7,以前一直用它写好多有趣的程序,虽然不是专业程序员。
但我很奇怪的是,大家没写一些公用的单元,一起大家交流的,大概觉得写得挺好的代码,几乎都是Google抄的,国内的百度几乎代码不好用,也许是国内优秀程序员不屑把优秀代码贴出来的吧。
为纪念D7,我单独写了一个单元,D7EncodedText.pas,他用的简单的原理实现Unicode,Gb2312,UTF32之间的转换。主要是将各种格式的string当字节使用,在各种格式之间转换就容易得多的,这思路,查了下,外国的比较多,而国内的少。
最近,更新了些功能,可以将16进制数据直接存为bin文件(点右键之类的出来),以便可以直接将看见的HexStr存为数据,例如RichEdit中显示的0x65存为到bin文件后,UltraEdit打开,16进制观察就是65。
下载地址(新更新了下,含其他一些有趣函数,新增加1个老外汇编写的单元FReplace.pas,以取代delphi自带的StringReplace太慢的问题,需采用FastReplace函数):
http://pan.baidu.com/s/16Lo1g
在D7EncodedText.pas中的主要函数,其中好几个函数还是借鉴老外的代码,的确很优秀,不过还是请大家有空帮我改改UTF32- >Ansistring(CoderToUtf32Str函数),我的方法只是临时解决的方案,虽然我的不报错但不正规;若最后不设置长度,很容易内存泄露,多点几次会报错,原因不明:
function UnicodeSave(const FileName:string;WS:widestring):boolean;
function UnicodeRead(const FileName:string):WideString;
function UnicodeBigSave(const FileName:string;WS:widestring):boolean;
function UnicodeBigRead(const FileName:string):WideString;
function UTF8Save(const FileName:string;WS:widestring):boolean;
function UTF8Read(const FileName:string):WideString;
function AnsiSave(const FileName:string;WS:widestring):boolean;
function AnsiRead(const FileName:string):WideString;
function GetTextType(const FileName: string): String; //返回文本格式信息
function TextRead(const FileName:string):FReadText; //读取各种格式
function TextSave(const FileName:string;WS:widestring):boolean; //保存原格式
function UnicodeEncode(Str:string;CodePage:integer):WideString; //unicode编码
function UnicodeDecode(Str:WideString;CodePage:integer):string; //unicode解码
function WStrToStr(const ws: WideString; codePage: Word): AnsiString; //宽字符串转单字符串,等同于UnicodeEncode
function StrToWStr(const s: AnsiString; codePage: Word): WideString; //单字符串转宽字符串,等同于UnicodeDecode
// function WideStringToUCS4String(const ws : WideString) : UCS4String;
function HexToInt(s: string): Integer; //IntToHex函数,D7自带;实际应该写为HexStrToInt
function IntToBinStr(i: integer): string; //integer范围signed 32-bit
function ByteToHexStr(AByte : Byte ) : string; //单字节处理
function HexStrToByte(HexS: String ) : Byte; //2位16进制字符串转为1个字节
function HexStrToDec(HexStr: AnsiString):AnsiString; //按每2位Hex字符转换为3位十进制数字字符串
//以下是连续字符和字节的处理
function BytesOf(const Val: AnsiString): TBytes; //Ansistring字符串的字节数组形式
function HexStrToBytes(const HexStr: AnsiString): TBytes; //连续的16进制数的字节数组形式
function BytesToHexStr(ABytes: TBytes; len: Integer): AnsiString; //字节数组的 Ansistring字符串形式
//机内码 转 Ansi(GB2312)字符,中文系统下:16进制/无空格分隔 ; 分隔字符串当然不能是0..9,A..F,a..f
function CoderToAnsiStr(HexS: String;const Delimited:string=''):String;
function CoderToUTF8Str(HexS: String;const Delimited:string=''):String; //机内码 转 Utf-8
function CoderToUnicodeStr(HexS: String;const Delimited:string=''):String; //机内码 转 unicode字符:默认16进制/无空格分隔
function CoderToUnicodeBigEndianStr(HexS: String;const Delimited:string=''):String; //机内码 转 unicodeBigEndian
function CoderToUtf32Str(HexS: String;const Delimited:string=''):String; //机内码 转 Utf-32
function CoderToUtf32BigEndianStr(HexS: String;const Delimited:string=''):String; //机内码 转 Utf-32 BigEndian
function UTF8StrToCoder(S:String; const Delimited:string=''):string; //Utf-8 转 机内码
function AnsiStrToCoder(S: String;const Delimited:string=''):String; //Ansi(包括GB2312,准确是当前的字符集)字符转机内码
function UniCodeStrToCoder(S:String;const Delimited:string=''):String; //unicode字符转机内码
function UniCodeBigEndianStrToCoder(S:String; const Delimited:string=''):string; //unicodeBigEndian字符转机内码
function UTF32StrToCoder(S:String; const Delimited:string=''):string; // Utf-32 转 机内码
function UTF32BigEndianStrToCoder(S:String; const Delimited:string=''):string; //Utf-32 BigEndian 转 机内码
function BinFileToHexStr(BinFileName:string):string; //按2进制文件读取文件为HexStr字符串(包括Bin文件)
function HexStrToBinFile(HexStr:string;BinFileName:string):Boolean; //HexStr存为2进制文件
21:25 2014-10-10
纪念经典的 D7(Delphi 7编码转换程序)相关推荐
- Delphi Base64编码/解码及ZLib压缩/解压
最近在写的程序与SOAP相关,所以用到了一些Base64编码/解码及数据压缩/解压方面的知识. 在这里来作一些总结: 一.Base64编码/解码 一般用到的是Delphi自带的单元EncdDecd,当 ...
- delphi Base64编码/解码及数据压缩/解压知识
一.Base64编码/解码 一般用到的是Delphi自带的单元EncdDecd,当然还有第三方提供的单元或控件,其中我所接触到的认为比较好的有Indy的TIdMimeEncode / TIdMimeD ...
- python经典书籍推荐:python编码规范
目录 INF-qa Python 编码规范............................................................................... ...
- 经典算法: 哈夫曼编码
1.哈夫曼树的基本概念 从A结点到B结点所经过的分支序列叫做从A结点到B结点的路径:从A结点到B结点所经过的分支个数叫做从A结点到B结点的路径长度:从二叉树的根结点到二叉树中所有叶结点的路径长度之和称 ...
- 编码——永不退色的计算机科学经典著作
关于那些经典我们一直在研读 编码这本书,是我在毕业之后买的第一本和计算机有关的书. 在这个信息和数据快速膨胀的时代,很多人离不开的是手机,很少回去在买书了,或者说"干嘛浪费钱买书啊,网上多的 ...
- Delphi历史版本介绍(二)从Delphi8到DelphiXE3
Delphi历史版本介绍(二)从Delphi8到DelphiXE3 Delphi 8 Delphi8是一个短命的版本,有点像微软的vista的感觉,没有很好的超越7,后来用被2005取代,很多人都是直 ...
- Delphi多平台开发版本选型
以下是Delphi开发的主流版本,从年代最早开始排序: Delphi 7 : 简称D7, Delphi的经典版本,稳定,32位Windows XP 时代的流行. 仅能开发w ...
- RAD Studio Delphi 10.4在Windows,Android,iOS,macOS和Linux上更快地可视化开发APP应用软件及新增功能详解
RAD Studio 10.4的新增功能 RAD Studio 10.4提供了显着增强的高性能本机Windows支持,通过出色的快速代码完成功能提高了生产率,通过托管记录提高了代码速度,并在现代多核C ...
- 拼音转汉字 和 字符编码测试
获得汉字的unicode编码 #define _UNICODE #include <tchar.h> #include <locale.h> #incl ...
最新文章
- 神奇的幻方2015提高组d1t1
- 为record类型自定义Equals方法
- 【Java基础总结】网络编程
- Hive时间戳TIMESTAMP使用的限制
- ubuntu 1610本地安装wordpress
- MFC视类(view)、框架类(MainFrame)关系梳理
- 通过官网下载KITTI数据集失败解决方法
- 数据库学习——SQL之SELECT查询语句
- 嵌入式-----产品手册----塔吊黑匣子电气安装培训
- AOP-Chap27-Balanced BSTs
- win7系统修改磁盘提示参数错误的解决办法
- iOS App添加Spotlight搜索(附Swift Demo)
- Android 传感器篇:(一)方向传感器
- 最小二乘法理解与应用
- linux中修改vlan的ip地址,RHEL在VLAN Trunk模式下的IP地址配置
- 【java8】LocalDateTime、LocalDate与LocalTime的基本使用
- 《在细雨中呼喊》---余华 (书摘)
- 保姆级教程:基于Docker部署雨中冒险2服务器 雨中冒险2开服
- java扰码_TD中下行同步码和扰码的区别和作用
- C++实现 L1-055 谁是赢家 (10分)
热门文章
- Visual Studio如何多行注释和取消多行注释
- ICML2021 | 深入研究不平衡回归问题
- 仿射变换原理和其OpenCV-Python实现知识汇总
- python划分有限元网格_有限元划分网格的基本原则
- 蓝桥杯省赛复盘(2021填空)
- 数组与字符串长度 — C语言经典方法
- android实现动态图标,android实现动态更换应用图标
- 震惊!国内一程序员去字节入职,竟然没有入职体检,这是假字节?
- 龙年促销热看网络营销
- 哈希码转磁力链 magnet:?xt=urn:btih: