2012-08-20 4 views
0

다음 표현을 시도하고 있지만 "chars '속성 설정자를 찾을 수 없습니다.""Chars"에 대한 속성 설정자를 찾을 수 없습니다

xstr, str : string; 
for i := 1 to length(str) do 
begin 
    if ((i mod 2)<>0) then 
    begin 
    xstr[i] := char(Ord(str[i]) xor $AA); <<<<------ Exception Raised 
    end 
    else 
    begin 
    xstr[i] := char(Ord(str[i]) xor $55); <<<<------ Exception Raised 
    end; 
end; 

"STR"값은 암호화 방법에 전달된다 : 여기

의 표현이다.

이것은 암호화 방법의 일부입니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

답변

5

System.String은 변경 불가능한 클래스입니다. 즉, 해당 인스턴스를 수정할 수 없음을 의미합니다. .NET은 문자열 연산을 수정하여 문자열의 새로운 인스턴스를 생성해야합니다. 귀하의 목적을 위해 아마도 char 수정 된 문자의 배열을 만들고 그로부터 문자열을 구성하는 것이 가장 쉽고 효율적입니다.

일반적으로 System.Text.StringBuilder 클래스는 가변 문자열 인스턴스를 제공합니다. 이 문자열의 불변성이 아니었다하더라도 사실

, 당신은하지 않았다 때문에 코드는 문자열을 할당 실패, 그래서 xstr[i]에 할당 버퍼 오버 플로우 예외가 얻을 것이다. char 배열을 사용할 때 그렇게해야합니다.

+0

포인터를 사용하는 안전하지 않은 솔루션은 어떻습니까? 델파이에서 가능합니까? –

+0

@Kuba 어쩌면. 그러나 그것이 갖는 이점은 무엇입니까? * 아마도 성능. 하지만 아마 그런 것조차 모른다. –

+0

@KubaWyrostek 안전하지 않으며 거의 ​​권장하지 않습니다. – elyashiv

관련 문제