我将lecacy app从Delphi 7转换为Delphi 2009。 我收到了这个错误: E2010不兼容的类型:'Char'和'AnsiChar' 我该如何解决?我试图声明Alphabet:Ansistring [AlphabetLength]但是失败了。
const
AlphabetLength = 64;
Alphabet: string[AlphabetLength] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
function TBase64.ValueToCharacter(value: Byte; var character: char): boolean;
begin
Result := true;
if (value > AlphabetLength-1) then
Result := false
else
// Compile error E2010 Incompatible types: 'Char' and 'AnsiChar'
character := Alphabet[value+1];
end;
function TBase64.CharacterToValue(character: char; var value: byte): boolean;
begin
Result := true;
value := Pos(character, Alphabet);
if value = 0 then
Result := false
else
value := value-1;
end;
答案 0 :(得分:4)
避免在Unicode Delphi版本(2009及更高版本)中使用弃用的ShortString类型:
const
AlphabetLength = 64;
Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
上述变化应该足够了。 您还必须考虑从1字节的AnsiChars更改为2字节的Chars。
编辑(jeroen pluimers):
答案 1 :(得分:0)
你可以使用
Alphabet : String = 'ABCDEFGH...'?
或者,如果您确定只使用ANSI字符(这里似乎就是这种情况),您可以直接投射:
character := Char (Alphabet [value+1]);
即使在D2009及更高版本中,似乎短字符串类型在内部使用AnsiChar
。