Delphi XE 的字符串理解
2011-02-25 21:53
183 查看
移动字符串或字符数组
var
Count: Integer;
Buf1, Buf2: array[0..255] of Char;
begin
// 现有代码 - 不正确的,因为该字符串=UnicodeString
Count := Length(Buf1);
Move(Buf1, Buf2, Count);
// 正确的Unicode
Count := SizeOf(Buf1); // <<-- 设置缓冲区的大小以字节为单位
Count := Length(Buf1) * SizeOf(Char); // <<-- 设置缓冲区的大小以字节为单位
Move(Buf1, Buf2, Count);
end;
Length返回的字符的大小,但移动预计将在数个字节。在这种情况下,而不是长度在使用sizeof(或应当由字符的大小长度乘以)。
调用TStream.Read / ReadBuffer也应该考虑字符串或字符数组。考虑下面的代码:
var
S: string;
L: Integer;
Stream: TStream;
Temp: AnsiString;
begin
// 现有代码 - 不正确的,因为该字符串=UnicodeString
Stream.Read(L, SizeOf(Integer));
SetLength(S, L);
Stream.Read(Pointer(S)^, L);
// 正确的数据为Unicode
Stream.Read(L, SizeOf(Integer));
SetLength(S, L);
Stream.Read(Pointer(S)^, L * SizeOf(Char)); // <<-- 设置缓冲区的大小以字节为单位
// 正确的ANSI数据
Stream.Read(L, SizeOf(Integer));
SetLength(Temp, L); // <<-- 使用临时AnsiString类型
Stream.Read(Pointer(Temp)^, L * SizeOf(AnsiChar)); // <<-- 设置缓冲区的大小以字节为单位
S := Temp; // <<--转换为Unicode字符串
end;
调用TStream.WriteBuffer. 考虑下面的代码:
var
S: string;
Stream: TStream;
Temp: AnsiString;
begin
// 现有代码 - 不正确的,因为该字符串=的UnicodeString
Stream.Write(Pointer(S)^, Length(S));
// 正确的数据为Unicode
Stream.Write(Pointer(S)^, Length(S) * SizeOf(Char)); // <<-- 设置缓冲区的大小以字节为单位
// 正确的ANSI数据
Temp := S; // <<--使用临时AnsiString类型
Stream.Write(Pointer(Temp)^, Length(Temp) * SizeOf(AnsiChar));// <<-- 设置缓冲区的大小以字节为单位
end;
var
Count: Integer;
Buf1, Buf2: array[0..255] of Char;
begin
// 现有代码 - 不正确的,因为该字符串=UnicodeString
Count := Length(Buf1);
Move(Buf1, Buf2, Count);
// 正确的Unicode
Count := SizeOf(Buf1); // <<-- 设置缓冲区的大小以字节为单位
Count := Length(Buf1) * SizeOf(Char); // <<-- 设置缓冲区的大小以字节为单位
Move(Buf1, Buf2, Count);
end;
Length返回的字符的大小,但移动预计将在数个字节。在这种情况下,而不是长度在使用sizeof(或应当由字符的大小长度乘以)。
调用TStream.Read / ReadBuffer也应该考虑字符串或字符数组。考虑下面的代码:
var
S: string;
L: Integer;
Stream: TStream;
Temp: AnsiString;
begin
// 现有代码 - 不正确的,因为该字符串=UnicodeString
Stream.Read(L, SizeOf(Integer));
SetLength(S, L);
Stream.Read(Pointer(S)^, L);
// 正确的数据为Unicode
Stream.Read(L, SizeOf(Integer));
SetLength(S, L);
Stream.Read(Pointer(S)^, L * SizeOf(Char)); // <<-- 设置缓冲区的大小以字节为单位
// 正确的ANSI数据
Stream.Read(L, SizeOf(Integer));
SetLength(Temp, L); // <<-- 使用临时AnsiString类型
Stream.Read(Pointer(Temp)^, L * SizeOf(AnsiChar)); // <<-- 设置缓冲区的大小以字节为单位
S := Temp; // <<--转换为Unicode字符串
end;
调用TStream.WriteBuffer. 考虑下面的代码:
var
S: string;
Stream: TStream;
Temp: AnsiString;
begin
// 现有代码 - 不正确的,因为该字符串=的UnicodeString
Stream.Write(Pointer(S)^, Length(S));
// 正确的数据为Unicode
Stream.Write(Pointer(S)^, Length(S) * SizeOf(Char)); // <<-- 设置缓冲区的大小以字节为单位
// 正确的ANSI数据
Temp := S; // <<--使用临时AnsiString类型
Stream.Write(Pointer(Temp)^, Length(Temp) * SizeOf(AnsiChar));// <<-- 设置缓冲区的大小以字节为单位
end;
相关文章推荐
- delphi XE的字符串处理
- 理解Delphi中的字符串string
- DelphiXE下的字符串变化
- DelphiXE下的字符串变化
- 九、java字符串函数及理解
- 在Delphi中获得唯一32位长字符串
- delphi 程序释放的理解
- delphi中move函数的正确理解(const和var一样,都是传地址,所以Move是传地址,而恰恰不是传值)太精彩了 good
- 我对字符数组/字符串/字符指针的理解!
- Delphi中常用字符串处理函数
- delphi 用windows消息传递字符串
- 字符串- 题意理解与转换
- Delphi 编写 DLL 返回字符串,.net 调用。
- delphi字符串替换
- 判断一个字符串是否是时间表达式(DELPHI)
- LockBox for Delphi-XE
- app开发利器 delphi xe
- Delphi的System.Str - 将数字格式化为字符串
- delphi验证‘数字字符串’地址的正则表达式验证function