delphi 中英文字符串与字节数组 互转
发布网友
发布时间:2022-04-26 09:27
我来回答
共2个回答
热心网友
时间:2022-06-26 18:37
你的Delphi是不是Delphi2009以上的版本,如果是的话默认的String是WideString.你所说的7个字节的String事实上是AnsiString。方法一事实上可以简化为:
const
str: AnsiString = '中文abc';
var
buf: array of Byte; len: Integer;
begin
//获取ansi字符串的长度
len := Length(str);
//设置buf数组的长度
SetLength(buf,len);
//复制数据到buf数组
Move(str[1],buf[1],len);
end;
而复制buf的方法,就是上面方法的反操作:
const
str: AnsiString = '中文abc';
var
buf: array of Byte; len: Integer;
astr: AnsiString; trgStr: String;
begin
//获取ansi字符串的长度
len := Length(str);
//设置buf数组的长度
SetLength(buf,len);
//复制数据到buf数组
Move(str[1],buf[1],len);
//获取buf数组的长度
len := Length(buf);
//设置需要复制的Ansi字符串的长度
SetLength(astr,len);
//从buf数组复制数据
Move(buf[1],astr[1],len);
//将数据复制到trgStr字符串
trgStr := astr;
//显示trgStr
ShowMessage(trgStr);
end;
热心网友
时间:2022-06-26 18:37
Delphi 的 string 本来就是单字节保存,显示的时候由操作系统画布自动区分中文英文,你直接按字节取出来就可以。中文字符双字节的每个字节的值都大于等于 $80 ,西文字符的字节的值都小于 $80 。追问
我用的是XE4,你说的很对,AnsiString类型能区别单双字节。学习了,3Q!!
你上面的代码,buf 下标应该从0开始吧,你可以调试看看。。。
Move(str[1],buf[0],len);
//你的代码很整齐
追答给你一个链接,希望有帮助。http://www.cnblogs.com/baoquan/articles/1027371.html