0

我想阻止用户在安装程序的密码字段之一中输入字符 > ASCII 127。

我用谷歌搜索但没有找到任何直接的方法,目前我正在使用:

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 码?

4

1 回答 1

1

首先,我会避免与字符串之间的转换;直接比较即可sPassword[nCount]127InstallScript 存储宽字符(16 位数字)。

作为替代方法,您可以尝试使用 US-ASCII代码页(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;
于 2011-09-23T14:37:11.453 回答