很喜欢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编码转换程序)相关推荐

  1. Delphi Base64编码/解码及ZLib压缩/解压

    最近在写的程序与SOAP相关,所以用到了一些Base64编码/解码及数据压缩/解压方面的知识. 在这里来作一些总结: 一.Base64编码/解码 一般用到的是Delphi自带的单元EncdDecd,当 ...

  2. delphi Base64编码/解码及数据压缩/解压知识

    一.Base64编码/解码 一般用到的是Delphi自带的单元EncdDecd,当然还有第三方提供的单元或控件,其中我所接触到的认为比较好的有Indy的TIdMimeEncode / TIdMimeD ...

  3. python经典书籍推荐:python编码规范

    目录 INF-qa Python 编码规范............................................................................... ...

  4. 经典算法: 哈夫曼编码

    1.哈夫曼树的基本概念 从A结点到B结点所经过的分支序列叫做从A结点到B结点的路径:从A结点到B结点所经过的分支个数叫做从A结点到B结点的路径长度:从二叉树的根结点到二叉树中所有叶结点的路径长度之和称 ...

  5. 编码——永不退色的计算机科学经典著作

    关于那些经典我们一直在研读 编码这本书,是我在毕业之后买的第一本和计算机有关的书. 在这个信息和数据快速膨胀的时代,很多人离不开的是手机,很少回去在买书了,或者说"干嘛浪费钱买书啊,网上多的 ...

  6. Delphi历史版本介绍(二)从Delphi8到DelphiXE3

    Delphi历史版本介绍(二)从Delphi8到DelphiXE3 Delphi 8 Delphi8是一个短命的版本,有点像微软的vista的感觉,没有很好的超越7,后来用被2005取代,很多人都是直 ...

  7. Delphi多平台开发版本选型

    以下是Delphi开发的主流版本,从年代最早开始排序: Delphi 7 :  简称D7,  Delphi的经典版本,稳定,32位Windows XP 时代的流行.             仅能开发w ...

  8. RAD Studio Delphi 10.4在Windows,Android,iOS,macOS和Linux上更快地可视化开发APP应用软件及新增功能详解

    RAD Studio 10.4的新增功能 RAD Studio 10.4提供了显着增强的高性能本机Windows支持,通过出色的快速代码完成功能提高了生产率,通过托管记录提高了代码速度,并在现代多核C ...

  9. 拼音转汉字 和 字符编码测试

    获得汉字的unicode编码 #define   _UNICODE   #include   <tchar.h>   #include   <locale.h>   #incl ...

最新文章

  1. 神奇的幻方2015提高组d1t1
  2. 为record类型自定义Equals方法
  3. 【Java基础总结】网络编程
  4. Hive时间戳TIMESTAMP使用的限制
  5. ubuntu 1610本地安装wordpress
  6. MFC视类(view)、框架类(MainFrame)关系梳理
  7. 通过官网下载KITTI数据集失败解决方法
  8. 数据库学习——SQL之SELECT查询语句
  9. 嵌入式-----产品手册----塔吊黑匣子电气安装培训
  10. AOP-Chap27-Balanced BSTs
  11. win7系统修改磁盘提示参数错误的解决办法
  12. iOS App添加Spotlight搜索(附Swift Demo)
  13. Android 传感器篇:(一)方向传感器
  14. 最小二乘法理解与应用
  15. linux中修改vlan的ip地址,RHEL在VLAN Trunk模式下的IP地址配置
  16. 【java8】LocalDateTime、LocalDate与LocalTime的基本使用
  17. 《在细雨中呼喊》---余华 (书摘)
  18. 保姆级教程:基于Docker部署雨中冒险2服务器 雨中冒险2开服
  19. java扰码_TD中下行同步码和扰码的区别和作用
  20. C++实现 L1-055 谁是赢家 (10分)

热门文章

  1. Visual Studio如何多行注释和取消多行注释
  2. ICML2021 | 深入研究不平衡回归问题
  3. 仿射变换原理和其OpenCV-Python实现知识汇总
  4. python划分有限元网格_有限元划分网格的基本原则
  5. 蓝桥杯省赛复盘(2021填空)
  6. 数组与字符串长度 — C语言经典方法
  7. android实现动态图标,android实现动态更换应用图标
  8. 震惊!国内一程序员去字节入职,竟然没有入职体检,这是假字节?
  9. 龙年促销热看网络营销
  10. 哈希码转磁力链 magnet:?xt=urn:btih: