11

我最近开始玩 C#,我试图理解为什么下面的代码不能编译。在错误注释的行中,我得到:

无法将类型“int”隐式转换为“char”。显式转换退出(您是否缺少演员表?)

我正在尝试用两个字符串做一个简单的异或运算。

public string calcXor (string a, string b)
{
    char[] charAArray = a.ToCharArray();
    char[] charBArray = b.ToCharArray();
    char[] result = new char[6];
    int len = 0;

    // Set length to be the length of the shorter string
    if (a.Length > b.Length)
        len = b.Length - 1;
    else
        len = a.Length - 1;

    for (int i = 0; i < len; i++) {
        result[i] = charAArray[i] ^ charBArray[i]; // Error here
    }

    return new string (result);
}
4

3 回答 3

21

如果您使用 XOR-ing 隐藏数据,请查看下面的代码。只要需要,密钥就会重复。这可能是一种更短/更好的方法:

public static string xorIt(string key, string input)
{
    StringBuilder sb = new StringBuilder();
    for(int i=0; i < input.Length; i++)
        sb.Append((char)(input[i] ^ key[(i % key.Length)]));
    String result = sb.ToString ();

    return result;
}
于 2013-10-10T14:03:08.930 回答
6

你正在做一个xor2 个字符。int由于没有数据丢失,这将为您进行隐式类型转换。但是,从intto转换回char需要您提供显式转换。

您需要将您的明确转换intcharfor result[i]

result[i] = (char) (charAArray[i] ^ charBArray[i]);
于 2013-02-20T03:44:05.730 回答
0

如果结果的值很重要,那么艾伦是正确的(接受的答案)。如果您只是在寻找匹配并且不担心性能,请使用 strcmp() 或 memcmp() 作为替代方案。

在汇编程序中,由于 T 周期较少,通常通过对自身进行 XOR 来初始化事物。如果我是暴力破解(哈希比较),那么这将是对 strcmp 或 memcmp 的改进,因为我真的不排序顺序,只是匹配/不匹配。

读者也应该意识到这一点,这是可以调整的。

于 2014-11-26T00:59:00.373 回答