2011-02-15 3 views
4

는 다음 코드델파이의 C 스타일 16 진수 - 문서화되지 않은 기능?

var 
    I: Integer; 

begin 
    I:= StrToInt('0xAA'); 
    ShowMessage(IntToStr(I)); // shows 170 = $AA 
end; 

이 BTW 기능이 C 헤더 파일의 진수 상수를 추출하는 나에게 도움이 델파이 2009에서 OK 것을 우연히 발견했습니다.

나는이 기능을 사용하는 것이 좋을까요? 아니면 기능이 향후 버전에서 "고정"될 것입니까?

+1

버그 또는 해결해야 할 것이 아닙니다. 그것은 단지'StrToInt()'가해야만하는 것입니다. 문자열을 정수로 변환합니다. 그리고 문자열은 정수 값을 포함해야합니다. 어떤 형식이든 상관 없습니다. –

+1

아니요, @Azad, 저는'StrToInt'가 받아 들일 수없는 정수를 작성하는 많은 형식을 생각할 수 있습니다. 8 진수와 2 진수가 마음에 듭니다. –

+0

@ Rob 케네디, 미안 해요. 'StrToInt'는 당신이 쓰는 것을 받아 들여야한다고 말하지는 않았습니다. 나는 그것이 작동한다면 이것이 잘못된 것은 아니라고 말하고 싶다. 그리고 나는 그것이 고쳐질 것이라는 것을 믿지 않는다. –

답변

12

이것은 기능이며 신뢰할 수 있습니다. 터보 파스칼이 델파이로 진화하면서 발생한 철학적 변화 중 하나는 C가 지배하는 세계에서 델피가 살아 있다는 것을 인정한 것이고, 델파이를 무시하고 델파이 개발자를 강요하는 것보다 C- 이즘을 우아하게 받아들이거나 용인함으로써 얻을 수있는 것이 더 많았습니다 그것을 밖으로 정렬합니다. Rob이 언급 한 C++ Builder와의 Interop도 중요한 요소 였지만 Delphi는 Windows 용으로 처음 설계되었으며 Windows에는 Windows API에 많은 C 언어 아티팩트가 있습니다.

"임피던스 불일치"라는 용어가 여기에 적용될 수 있습니다. 델파이 16 진수 처리와 "나머지 세상"사이의 임피던스 불일치를 제거하기에 충분히 간단하므로 그렇게했습니다.

+0

좋은 소리 ... 그냥 문서화하는 것을 잊지 마라. – HeartWare

+0

그래서 소프 씨를 만나서 반갑습니다. –

4

Delphi RTL은 C++ Builder에서도 사용됩니다. StrToInt에서 "10 진수 또는 16 진수 표기법"을 허용한다고 명시 할 때 문서가 정확히 무엇을 의미하는지 자세히 설명하지 않습니다. StrToInt이 C 스타일 번호를 계속 받아 들일 것으로 안전하게 기대할 수 있습니다.

ValRead과 같은 입력을 허용합니다 (모두가 System._ValLong을 호출하기 때문에).