c#代码转python代码⼯具_Python⾄C#代码转换
我正在尝试将下⾯的python代码⾏转换为C#:
encoded_c = chr(abs(ord(string[i]) - ord(key_c) % 256))
这是我在C#中得到的:
char encoded_c=(char)Math.Abs((int)decodedString[i] - (int)key_c % 256);
但是,它不会返回相同的结果。我认为这与(int)强制转换有关,但是当我尝试搜索ord()或(int)的其他⽅法时,它们似乎⽆效。
作为参考,下⾯是整个代码块:
蟒蛇:
def basic_decode(key,string):
decoded_chars=[]
string=base64.urlsafe_b64decode(string)
string=base64.b64decode(string)
for i in xrange(len(string)):
key_c=key[i % len(key)]
encoded_c = chr(abs(ord(string[i]) - ord(key_c) % 256))
decoded_chars.append(encoded_c)
decoded_string="".join(decoded_chars)
return decoded_string
C#:
public string basic_decode(string key,string message)
{
List decoded_chars = new List();
byte[] data = Convert.FromBase64String(message);
string decodedString = Encoding.UTF8.GetString(data);
data = Convert.FromBase64String(decodedString);
decodedString = Encoding.UTF8.GetString(data);
foreach (int i in Enumerable.Range(0, decodedString.Length))
{
char key_c = key[i % key.Length];
char encoded_c=(char)Math.Abs((int)decodedString[i] - (int)key_c % 256); //this line doesnt return what it's supposed to decoded_chars.Add(encoded_c);
}
string decoded_string = string.Join("",decoded_chars);
return decoded_string;
python转java代码使⽤以下命令执⾏C#函数时:
Console.WriteLine(t.basic_decode("test", "NGNybTU5WE0yQT09"));
注意:NGNybTU5WE0yQT09:是⼀个编码字符串,已使⽤encoding函数进⾏编码(对于python版本,它可以完美地进⾏编码和解码)。
它返回
?
?
?
?
?
?
?
6541765432654186541765417643265418
问号是指:
Console.WriteLine(encoded_c);
该代码位于字符char encode_c = ....下
什么时候
print basic_decode("test","NGNybTU5WE0yQT09")
执⾏后,返回:
⽶
Ë
s
s
⼀种
G
Ë
信息
消息是正确的解码消息
解决⽅案
好的,我在转换后的代码中发现了两个问题。⾸先,第⼆Encoding.Unicode.GetString是放弃输⼊。例如,Python代码中第⼀个字符的整数等效值为225,⽽在C#代码中则为65533。您可以通过完全跳过第⼆个编码⽽使⽤来解决此问题data。
第⼆个是您正在使⽤aList存储结果字符。然后,当您string.Join⽤于创建结果字符串时,您正在将⼀堆整数组合成⼀个字符串,这就是为什么输出是⼀堆数字的原因。将列表更改为aList,它将产⽣正确的结果。
功能代码:
public string basic_decode(string key, string message)
List decoded_chars = new List();
byte[] data = Convert.FromBase64String(message);
string decodedString = Encoding.UTF8.GetString(data);
data = Convert.FromBase64String(decodedString);
foreach (int i in Enumerable.Range(0, data.Length))
{
char key_c = key[i % key.Length];
char encoded_c = (char)Math.Abs((int)data[i] - (int)key_c % 256); decoded_chars.Add(encoded_c);
}
string decoded_string = string.Join("", decoded_chars);
return decoded_string;
}
经过测试:
static void Main(string[] args)
{
string dec = basic_decode("test", "NGNybTU5WE0yQT09"); Console.WriteLine(dec);
}
// Prints:
//
// message
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论