我想让用户不要输入字符>安装程序中的一个密码字段中的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码?
答案 0 :(得分:1)
首先,我会避免转换为字符串;只需将sPassword[nCount]
与127
直接比较即可; InstallScript存储宽字符(16位数字)。
作为替代方法,您可以尝试使用US-ASCII WideCharToMultiByte(20127)调用code page。我没有那么强大的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;