我写了一段函数,中间有一个函数是要处理一个字符串,其功能是将几个Byte类型的数据转换成对应序号的字符之后放到字符串中,函数的代码如下,x1到x7是7个Byte类型的数据:
function StrProce():string;
var
  cmd:shortstring;
begin
  setlength(cmd,7);
  cmd[1]:=chr(x1);
  cmd[2]:=chr(x2);
  cmd[3]:=chr(x3);
  cmd[4]:=chr(x4);
  cmd[5]:=chr(x5);
  cmd[6]:=chr(x6);      //这一句之后就不对了
  cmd[7]:=chr(x7);
  result:=cmd;
end;在执行过程中,返回的字符串总是随机的出错,单步跟踪了一下,发现如果x6的数值大于128而x7小于64时,返回的字符串的第六个字符就变成了0x3F,第7个字符的内容则丢失,不知道这是什么原因,是否和大于128的字符的处理方式有关呢?请知道的朋友帮帮忙,100分不够可以再加!!!

解决方案 »

  1.   

    不知道你的Byte是什么数据,你看这样行吗?
    先把数据写入Byte数组,然后一气呵成,转换成字符串,这样应该就避免了你的那个问题
      

  2.   

    应该不会的,帮助里function Chr(X: Byte): Char;
    而byte的范围是Byte    0..255
    按你的说法,应该不会有错的
      

  3.   

    把数组转换成字符串该怎么做,我刚刚用Delphi没多久,能否指教一下!谢谢!!
      

  4.   

    这个程序编译是没有出错,运行时也没有报错,唯一的错误就是返回值经常不对,而且就是在x6的数值大于128而x7小于64时,返回的字符串的第六个字符就变成了0x3F,第7个字符的内容丢失。我想了好久都没有头绪,有没有人知道这是为什么?
      

  5.   

    X:array[0..8] of byte;你可以在最后一个字节上,付上0,以空字符结尾
    转换:Pchar(@X[0]);
      

  6.   

    setlength(cmd,7);
    只生成 0..6 的数组 要用7的话,要SET到8
      

  7.   

    谢谢大家的帮助,问题已经解决,是unicode字符集的问题,转换成数组处理就好了。揭帖!!!