2010-01-20 6 views
1

기수를 제공 할 수있는 C utoa 함수의 델파이 해당 기능이 있습니까? 저는 Delphi 2007을 사용하고 있습니다. utoa와 함께 기수 32를 사용하여 명명 된 파일을 읽어야합니다. 차라리 휠을 다시 발명하지 않고 내 자신의 버그를 소개하려고합니다. [편집 :] IntToStr가 작동하는 것과 같은 방식으로 작동합니다. 기본 10을 사용하므로 IntToStr의 동등한 실행은 utoa (값, 10)가됩니다.C에서 유토아의 델파이 동등한

예를 들어 정수 100은 "34"값을 반환해야합니다.

+0

기수가 32 인 경우 "32"를 생성하는 올바른 입력이 10이되지 않습니까? (32의 삼중 루트는 pi보다 약간 비합리적 인 수치입니다.) –

+0

@mason, yes - 문제가 해결되었습니다. – mj2008

+2

링크 된 문서에서 utoa는 기본 10, 8, 16 만 지원합니다. 기본 32에 사용할 문자는 무엇입니까? – Jacob

답변

3

흠, 이전 코드를 검색해 보니 작동하는 것으로 나타났습니다!

function ItoA(value : Cardinal; Radix : Cardinal) : string; 
const 
    acCharRef : array [0 .. 35] of char 
    = (
    '0', '1', '2', '3', '4', '5', '6', '7', 
    '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 
    'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 
    'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 
    'W', 'X', 'Y', 'Z' 
); 
var 
    nIndex : Integer; 
    szBuild : string; 
begin 
     {* Now loop, taking each digit as modulo radix, and reducing the value 
     * by dividing by radix, until the value is zeroed. Note that 
     * at least one loop occurs even if the value begins as 0, 
     * since we want "0" to be generated rather than "". 
     *} 
    szBuild := ''; 

    repeat 
    nIndex := value mod radix; 
    szBuild := acCharRef[nIndex] + szBuild; 
    value := value div radix; 
    until value = 0; 

    result := szBuild; 
end; 
+4

기수가 35보다 크지 않은지 확인하려면 상단에 확인이나 단정이 필요할 수도 있지만 매우 좋습니다. –

+0

메이슨과 동의하십시오. 상단의 간단한 라이너 하나만 있으면 안전합니다. 어설 션 (기수> = 0 및 기수 <36); 또는 알 수없는 기수로 향후 확장을 허용하는 것이 더 좋습니다. : 어설 션 (기수> = 낮음 (acCharRef) 및 기수 = = 높음 (acCharRef)); –