A:CHAR;
S:STRING;
I,J,SUM:INTEGER;
FOR J:=1 TO LENGTH(S)DO BEGIN
 A:=?(COPY(S,I,1);
 I:=ORD(A);
SUM:=SUM+I;
END;
我想取S 的每个字符的ASCII码值。?应为什么函数。才能使ORD(A)值正确。
PCHAR()函数不正确。请指教。

解决方案 »

  1.   

    不用转换
    I:=ord(s[i])// i为0,1,2...
      

  2.   

    可以这样啊:
    A:CHAR;
    S:STRING;
    I,J,SUM:INTEGER;
    FOR J:=1 TO LENGTH(S)DO BEGIN  
      {A:=?(COPY(S,I,1);}   //去掉这一句
      A:=Ord(S[j]);
      I:=ORD(A);
      SUM:=SUM+I;
    END;
      

  3.   

    FOR J:=1 TO LENGTH(S)DO BEGIN
     A:=S[I];
     I:=ORD(A);
    SUM:=SUM+I;
    END;
      

  4.   

    CopyMemory(@C,@S[1],Length(S));
      注意 S为AnsiString,如果是WideString请先转换成AnsiString
    该函数是Win Api,在Windows.Pas里
    procedure CopyMemory(Destination: Pointer; Source: Pointer; Length: DWORD);
    不过Borland用他自己的方法实现的。
    the CopyMemory function copies a block of memory from one location to another. VOID CopyMemory (    PVOID Destination, // address of copy destination 
        CONST VOID *Source, // address of block to copy 
        DWORD Length  // size, in bytes, of block to copy  
       ); 
    Return ValuesThis function has no return value.