D2009 char 배열 문제 - 어떻게 '우아하게'코드를 수정할 수 있습니까?
-
03-07-2019 - |
문제
이전의 델파이 프로젝트 중 일부를 살펴보고 D2009로 업그레이드합니다.이 버전은 이전의 모든 릴리스에 대한 큰 개선 (제네릭.collection -wow!))을 발견하면 다양한 문제에 직면합니다. 이것은 내가 해결할 수 있었지만 솔루션은 내가 생각하는 것만 큼 우아하게 보이지 않습니다. (참고, 나는 지금 약 3 년 동안 델파이 코드를 작성하지 않았으며, 그때까지도 무슨 일이 일어나고 있는지에 대한 심층적 인 이해보다 아마추어 해킹이었습니다).
내 코드에는 tfilestream이 있고 그것을 읽습니다. 파일의 첫 세 문자가 파일 유형을 유효한 것으로 인식하기 위해 CTR이라는 방식으로 이전 Delphi 앱에 의해 이전에 작성되었습니다. 독자는 처음 세 바이트에서 다양한 char 배열로 읽었습니다 (여기에는 문제가 있습니다. 이제 크기가 2 바이트입니다). 그런 다음이 배열을 문자열로 취급하여 'CTR'을 읽는지 확인하십시오.
var ...
buffer: array[0..2] of char;
begin
...
InStream.read(buffer, 3);
if buffer <>'CTR' then begin ShowMessage('Not a valid file!'); exit; end;
...
이것은 컴파일하고 작동하는 데 사용되었지만 이제 버퍼는 실제로 6 바이트 길이이므로 'CTR'과 같지 않습니다. 항상.
버퍼를 변경하여 이것을 수정했습니다 array[0..2] of byte
그리고 다음을 수행하기 위해 더 많은 로컬 변수를 소개했습니다.
for b in buffer do s := s + chr(b); //notice the for..in loop now available in D2009
if s<>'CTR'...
따라서 기본적으로 나는 개별 바이트를 문자열로 돌린 다음 비교를 수행하지만 더 간단한 방법이 있어야합니다. 이 문제에 대해 약간의 빛을 비추어 주시겠습니까?
해결책
버퍼를 설정할 수 있습니다
var
buffer: array[0..2] of AnsiChar;
그리고 당신은 이전과 똑같은 것을 읽습니다.