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