从字符声明字符串会产生意外结果。为什么会这样?

Declaring a string from a character has an unexpected result. Why is this so?

提问人:Aleksandr Sergeevich 提问时间:11/17/2020 更新时间:11/17/2020 访问量:53

问:

半天寻找这个错误。为什么第三种情况会出现意想不到的结果?

        // case 1
        string value1 = "a" + "a" + "A";  
        byte[] asciiBytes1 = Encoding.ASCII.GetBytes(value1); // expected: 97 - 97 - 65
        Console.WriteLine(string.Join(" - ", asciiBytes1));   //   result: 97 - 97 - 65

        // case 2
        string value21 = 'a' + "A"; 
        byte[] asciiBytes21 = Encoding.ASCII.GetBytes(value21); // expected: 97 - 65
        Console.WriteLine(string.Join(" - ", asciiBytes21));    //   result: 97 - 65 

        // case 3
        string value22 = 'a' + 'a' + "A"; 
        byte[] asciiBytes22 = Encoding.ASCII.GetBytes(value22); // expected: 97 - 97 - 65
        Console.WriteLine(string.Join(" - ", asciiBytes22));    //   result: 49 - 57 - 52 - 65
c#

评论

1赞 Hans Kilian 11/17/2020
因为它确实如此,你得到一个字符串是“194A”,因为 97+97 是 194。((string)((int)'a' + (int)'a') + "A"

答:

1赞 Adam 11/17/2020 #1

您正在混合字符和字符串。 这: “a” + “a” 导致 ASCII CHAR 值的整数相加。

3赞 johnny 5 11/17/2020 #2

这是操作的顺序,在所有其他示例中,您将 char 添加到字符串中。但是,在第三个示例中,您将 char 添加到 char 中,该 char 充当字节并执行整数乘法。

然后将整数添加到字符串“A”中

所以 'a' + 'a' = 194 和 194 + “A” = 197A

这就是你看到的结果

评论

1赞 Hans Kilian 11/17/2020
虽然是 194 :)
1赞 Aleksandr Sergeevich 11/17/2020
亚当的回答速度快了 3 秒:)