0

我想讓用戶在安裝程序的其中一個密碼字段中輸入字符> ASCII 127。InstallScript中的字符ASCII代碼InstallShield

我用Google搜索,但沒有發現這方面的任何直接的方式,目前我使用:

CHAR ch; 
STRING ASCII; 
NUMBER nASCII; 

for nCount = 0 to StrLength(sPassword) 
    ch = sPassword[nCount]; 
    sprintf(ASCII,"%d",ch); 

    StrToNum(nASCII,ASCII); 

    if (nASCII > 127) 
    MessageBox("Invalid Character in Password",INFORMATION); 
    endif; 

endfor; 

有沒有更好的方法來從字符串獲得ASCII碼?

回答

1

首先,我會避免與字符串的轉換;直接比較sPassword[nCount]127; InstallScript存儲寬字符(16位數字)。

作爲一種替代方法,您可以嘗試使用US-ASCII code page(20127)撥打WideCharToMultiByte。我對InstallScript並沒有那麼強大,而且我沒有使用編譯器編碼,所以您可能需要修復一兩個錯誤,但這裏有個大概的想法:

#define CP_US_ASCII 20127 
extern prototype NUMBER Kernel32.WideCharToMultiByte(NUMBER, NUMBER, WSTRING, NUMBER, STRING, NUMBER, STRING, BYREF BOOL); 

function BOOL IsSafeAscii(STRING szCheck) 
    STRING szOut; 
    BOOL bReplaced; 
begin 
    WideCharToMultiBute(CP_US_ASCII,   // only supports characters 0-127 
         WC_NO_BEST_FIT_CHARS, // or maybe 0; disallow turning accented to plain 
         szCheck,    // test string 
         StrLength(szCheck), // length of test string 
         szOut,    // return buffer 
         StrLength(szOut),  // length of return buffer 
         "?",     // replacement for unsupported characters 
         bReplaced);   // whether replacement was used 
    return !bReplaced; 
end; 
相關問題