我正在尝试获取被防火墙屏蔽的屏蔽电子邮件。我在python中找到了解决方案,但我不知道如何在dart或flutter中做到这一点。这是python代码
r = int(encodedString[:2],16)
email = ''.join([chr(int(encodedString[i:i+2], 16) ^ r) for i in range(2, len(encodedString), 2)])
return email
print cfDecodeEmail('543931142127353935313e352e7a373b39') # usage
-
在Python中,
encodedString[:2]
/encodedString[i:i+2]
从encodedString
中提取两个字符。Dart等价物(假定ASCII字符)将分别为encodedString.substring(0, 2)
和encodedString(i, i + 2)
。 -
Dart中相当于Python的
''.join(list)
的是list.join()
。 -
Dart中相当于Python列表综合(
[i for i in items]
)的是集合-for
:[for (var i in items) i]
。 -
与Dart中Python的
for i in range(2, len(encodedString), 2)
等效的是使用一个带有开始、条件和增量的基本for
循环:for (var i = 2; i < encodedString.length; i += 2)
。 -
在Python中,
int(string, 16)
将string
解析为十六进制数。在Dart中,使用int.parse(string, radix: 16)
。 -
在Python中,
chr(integer)
从指定的代码点创建一个字符串。Dart中的等价物是String.fromCharCode(integer)
。
将其整合在一起:
String cfDecodeEmail(String encodedString) {
var r = int.parse(encodedString.substring(0, 2), radix: 16);
var email = [
for (var i = 2; i < encodedString.length; i += 2)
String.fromCharCode(
int.parse(encodedString.substring(i, i + 2), radix: 16) ^ r,
)
].join();
return email;
}
void main() {
// Prints: me@usamaejaz.com
print(cfDecodeEmail('543931142127353935313e352e7a373b39'));
}