1, 怪异现象:字符串相加操作不正常!

以上代码,明显输出字符串应含有后缀“.jpg”,但实际输出却不含后缀(如下),字符串加法操作似乎不起作用了!

采用showMessage进行输出,看看结果如何?

结果仍是不显示字符串后缀,但可以看到字符串偏左显示,似乎后面还有很多不可见字符。

2,怪异原因:字符串中含有\0,即字符串终止符

以上现象已经看出,字符串加法失效的原因可能是含有某些不可见字符,那到底是什么字符呢?

回到这些字符串产生的源头,即下面由字节数组转换成字符串函数:

显然,此函数未考虑len长度以内可能含有的\0字符,如果buffer中len长度以内含有\0字符,那么这些\0字符也会被复制进result字符串中,造成后续字符串加法“失效”。

3,解决方案:修改函数

将函数修改如下,判断逐字节判断buffer,遇到\0就返回,这样转换的字符串就不含\0了。问题解决。

//字节转换为字符串 $D4 $C1--> '粤'
function BytesToString(buffer: Array of byte; offset:integer; len: integer): string;
var
str: string;
i : Integer;
begin
SetLength(str, len);
for i:= to len- do
begin
if buffer[offset-+i]= then break; //遇到ASCII 不再复制!
Move(buffer[offset-+i], str[+i], );//注意,这里是从str[]开始复制的
end;
//Move(buffer[offset-], str[], len);//注意,这里是从str[]开始复制的
//ShowMessage (str); SetLength(str, i);
result := str;
end;

最新文章

  1. 【刷题记录】 && 【算法杂谈】折半枚举与upper_bound 和 lower_bound
  2. Ubuntu 16.04 LTS 安装 Nginx/PHP 5.6/MySQL 5.7 (LNMP) 与Laravel
  3. hive查询
  4. Openjudge-计算概论(A)-找和为K的两个元素
  5. Jquery 获取对象的几种方式介绍
  6. 几大时尚前端UI框架的IE支持
  7. Linux命令之rpm篇
  8. Learning-Python【21】:Python常用模块(4)—— re、logging、hashlib、subprocess
  9. git bash返回上一级目录
  10. 【1】【JUC】JDK1.8源码分析之ReentrantLock
  11. bzoj4456: [Zjoi2016]旅行者
  12. Linxu安装Tomcat与Jdk并卸载自带OpenJdk
  13. Gzip压缩和解压
  14. @Controller,@Service,@Repository,@Component详解
  15. Javac的命令
  16. (队列的应用5.3.3)POJ 3125 Printer Queue(优先队列的使用)
  17. ORACLE中通过DBMS_CRYPTO包对表敏感字段进行加密
  18. xcode,不要将.a文件拖到xcode里
  19. C++ 从内存的角度,学习虚继承机制
  20. 余秋雨的话(与OI无关)

热门文章

  1. intellij使用tomcat搭建servlet运行时环境
  2. day2-搭建hdfs分布式集群
  3. Grunt学习日记
  4. A Go library implementing an FST (finite state transducer)——mark下
  5. POJ2115 C-Loop
  6. Android下载资源
  7. Eclipse 配置 Python 环境
  8. 【168】ENVI入门系列
  9. 私有CA和证书
  10. Linux 系统命令 - pwd - 显示当前所在的位置