delphi 中英文字符串与字节数组 互转

高手帮我教一下,delphi 中英文字符串与字节数组 互转?

buf : array of Byte;str := '中文abc';1、怎样把含中英文字符串 str 保存到 buf 中,且只占7个字节。即一个中文字符占2个字节,1个英文占1个字节?
方法一:
iPos := 0;
SetLength(buf, Length(str) * 2);// 预设 2 倍大小
for i:=1 to Length(str) do begin //区分单双字节 if ByteType(str,i) = mbSingleByte then begin Move(str[i], buf[iPos], 1); Inc(iPos); end else if ByteType(str,i)= mbLeadByte then begin Move(str[i], buf[iPos], 2); Inc(iPos,2); end; end;
//buf[0...iPos] 就是所要的 byte 数组

2、怎样上述的buf[0...iPos]解析出来,保存到一个string 变量中?

请前辈给个具体代码,
没分了,悬赏不了,不好意思
最新回答
村姑范

2025-03-02 07:58: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;
路遥归梦

2025-03-02 07:09:01

Delphi 的 string 本来就是单字节保存,显示的时候由操作系统画布自动区分中文英文,你直接按字节取出来就可以。中文字符双字节的每个字节的值都大于等于 $80 ,西文字符的字节的值都小于 $80 。
追问

我用的是XE4,你说的很对,AnsiString类型能区别单双字节。学习了,3Q!!

你上面的代码,buf 下标应该从0开始吧,你可以调试看看。。。

  1.  Move(str[1],buf[0],len);

  2. //你的代码很整齐

追答
给你一个链接,希望有帮助。
http://www.cnblogs.com/baoquan/articles/1027371.html