Delphi String 与wideString 的完美转换

时间:2022-09-21 11:41:06

一般来说,String与widestring 的转换是系统自动进行的,但是,考虑如下字符串 s:=#2+#3+#0+#10+#0+#1+#164+#59;,显然S的长度为8,然后执行如下代码 var S,S2:string; I: Integer; WS:widestring; begin s:=#2+#3+#0+#10+#0+#1+#164+#59; showmessage(inttostr(Length(S))); //显示为8,正常 WS := S; showmessage(inttostr(Length(WS))); //显示为7。。。 S := WS; showmessage(inttostr(Length(S))); //显示为7。。。少了一位 造成这点的原因就在于,当字符的ascii码大于127的时候,widestring判断它为一个双字节的词(比如中文字符之类的) 完美转换的方法如下: //string to widestring
 setlength(WS,Length(S));
 for I := 1 to length(S) do // Iterate
 begin WS[I]:= widechar(S[I]);
 end; // for
//widestring to string
 setlength(S2,Length(WS));
 for I := 1 to length(WS) do // Iterate
 begin S2[I]:= char(WS[I]);
 end; // for
 showmessage(inttostr(Length(S2)));
if S=S2 then showmessage('OK');
注意的是,s=s2,但是 s<>ws 因为现在很多COM接口什么的都是Widestring类型的,假如要传递用16进制写的字符串的话,容易造成丢失字节,用这种办法就可以解决这个问题了,但是要记得是,这2个函数要配套使用!

Delphi String 与wideString 的完美转换的更多相关文章

  1. xStream完美转换XML、JSON

    xStream框架 xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换: 前面有介绍过json-lib这个框架,在线博文:htt ...

  2. C&plus;&plus;11新特性之右值引用&lpar;&amp&semi;&amp&semi;&rpar;、移动语义&lpar;move&rpar;、完美转换&lpar;forward&rpar;

    1. 右值引用 个人认为右值引用的目的主要是为了是减少内存拷贝,优化性能. 比如下面的代码: String Fun() { String str = "hello world"; ...

  3. Delphi String 常用字串符处理函数

    Delphi 在面对跨平台开发,程序语言也改进不少,不过有些改进,让原本 Delphi 开发者有些不适应,最显注的就是字串处理函数了,原本 Pascal 语言字串起始由 1 开始,几乎是它的经典了,新 ...

  4. C&num;利用 string&period;Join 泛型集合快速转换拼接字符串

    C#利用 string.Join 泛型集合快速转换拼接字符串 List<int> superior_list = new List<int>(); superior_list. ...

  5. MFC中char&ast;&comma;string和CString之间的转换

    MFC中char*,string和CString之间的转换 一.    将CString类转换成char*(LPSTR)类型 方法一,使用强制转换.例如:  CString theString( &q ...

  6. String与StringBuffer之间的转换

    来源:http://www.oschina.net/code/snippet_2261089_47352 package demo; /* String与StringBuffer之间的转换 * Str ...

  7. 【Java】【9】String Date Calendar之间的转换

    前言: 1, Calendar 转化 String 2, Calendar 转化 Date 3,Date 转化 String 4,Date 转化 Calendar 5,String 转化 Calend ...

  8. delphi string&period;split 按照任意字符串分割语句

    delphi string.split 按照任意字符串分割语句 1.就是把一个指定的字符串用指定的分割符号分割成多个子串,放入一个 TStringList 中 function ExtractStri ...

  9. &lbrack;java&rsqb;转&colon;String Date Calendar之间的转换

    String Date Calendar之间的转换 String Date Calendar  1.Calendar 转化 String Calendar calendat = Calendar.ge ...

随机推荐

  1. SQL VIEW 使用语法

    之前一直都不知道VIEW有什么作用,写程序的时候也很少遇到过,复习SQL语句的时候碰到了,就记录下来吧. 什么是视图? 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列, ...

  2. 《du命令》-linux命令五分钟系列之三

    本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc 希望您能通过捐款的方式支持Linux大棚博客的运行和发展.请见“关于捐款” == ...

  3. 如何通过Request&period;ServerVariables&lbrack;&quot&semi;HTTP&lowbar;USER&lowbar;AGENT&quot&semi;&rsqb;获取客户端操作系统信息

    http://www.useragentstring.com/pages/api.php

  4. servlet 具体实现

    1)servlet 具体实现 1.在GenericServlet中声明了一个ServletConfig类型的成员变量,在init(ServletConfig)方法中对其进行了初始化 2.利用servl ...

  5. mysql my&period;ini配置文件修改无效&comma;修改mysql默认字符集

    问题 开始于 使用mysql命令插入中文数据插不进去 ERROR 1366 (HY000): Incorrect string value: '\xD6\xD0\xCE\xC4' for column ...

  6. 线性表之何时使用ArrayList、LinkedList&quest;

    前言 线性表不仅可以存储重复的元素,而且可以指定元素存储的位置并根据下表访问元素. List接口的两个具体实现:数组线性表类ArrayList.链表类LinkedList. ArrayList Arr ...

  7. PHPstorm快捷键Ctrl &plus; Alt &plus; Left 或Right不起作用

    最近遇到一个问题,就是安装的phpstorm的回撤快捷键不起作用了,死活用不了!折磨了好久,终于找到解决方法了,具体请看我的github文章: 快捷键Ctrl + Alt + Left 或Right不 ...

  8. &lbrack;Swift&rsqb;LeetCode501&period; 二叉搜索树中的众数 &vert; Find Mode in Binary Search Tree

    Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred ...

  9. 无法获得锁 &sol;var&sol;lib&sol;dpkg&sol;lock

    sudo rm /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/lock

  10. ftell函数使用注意事项

    ftell函数的原型如下: long ftell(FILE *stream); 主要功能是获取FILE指针在当前文件中的位置. 但在使用文本模式打开文件时,ftell函数返回值不一定跟FILE文件指针 ...