我现在在做一个程序,目的是把从外界收进来的数以一个文件的形式存起来,我把收进来的二进制数变成了string,然后对它进行处理,判断它若为负数就求反码,
if a[x]=chr(30) then
         a[x]:=chr(31)
      else
         a[x]:=chr(30);
         x:=x+1;
运行后没有错误,但是按了按钮后 ,就弹出错误信息
project project2.exe raised exception class EAccessViolation with message 'access violation at address 0044F5BB in module 'project2.exe'.read of address 00000002'process stopped.
然后就是上面的程序出错了,希望各位多加指点,是我这几句话写错了,还是要再加入什么,拜托各位多多指点了!!!

解决方案 »

  1.   

    这是我的程序,大家多多指点
    Edit1.Text里存的就是收到的二进制数,但我把它已经转成string了begin
    b:=length(Edit1.Text);//计算字节数
    if b=16 then
        a:=Edit1.Text;//每16位取出
      if a[3]=chr(30) then
         delete(a,1,3)//如果第三位为0表示正数,去掉头三位没用的数
      else
         delete(a,1,2);//否则为负数,去掉头二位
          x:=1;
          while x<15 do
          begin
          if a[x]=chr(30) then
             a[x]:=chr(31)
          else
             a[x]:=chr(30);
             x:=x+1;
          end;
         
       e:=a;//14位数
       c:=bintoint(e);//转化为十进制数
    大家多多指点呀,万分感谢!!
      

  2.   

    不想批评楼主的代码风格,可实在忍受不了,变量定义太差,a,b,c,e命名太乱。有整形,有字符串。循环肯定有错误的。字符串a有时去掉前三位,有时去掉前两位,而下面的while循环都到14为止,当去掉三位的时候,a的长度是13位,而循环到14就会数组越界。
     while x<15 do
    ---------------------->>>>>>>>>>
    while x<(length(a)+1) do
      

  3.   

    很不好意思,我刚刚开始学习,所以代码编得实在不成样子,大家多多谅解。
    我也发现变量定义得很乱,有时自己也糊涂了,但我从外界收进来的就是字符串,又要让它循环,只能再定义整形了,不知有没有更好的方法呢?
    我照楼上说得改了,可还是那个错误呀,而且又提示在   if a[3]=chr(30) then   这地方错了,实在不知道怎么改呀,一头雾水,大家多多帮忙!!!