关于字符串和转义字符的混淆

时间:2015-03-31 11:49:45

标签: c# escaping

假设有一个字符串创建如下: string s ="这个\ n是新的盯着&#34 ;;

上面的代码我们有一个\ n这是一个新的行字符,可以通过双引号之前的@或使用\来转义。

我心中的困惑是:

一个。假设这个值从输入框中取出到代码中,然后\ n被视为普通字符串(自动获取\ n)而不是新行字符。

湾如果我们将文本框值分配给多行文本框或标签,则该值将被视为\ n并输出为\ n而不是换行符。

请问这个概念是否有任何参考。

2 个答案:

答案 0 :(得分:1)

转义字符在编译时处理。这意味着程序的编译版本不包含任何转义字符。

同样适用于@""表示法:它只是改变了在编写程序时为字符串提供数据的方式,并且不包含在已编译的程序中。

在文本框中输入的数据不会进行转义字符处理,因此输入\n实际上是一个包含字符'\''n'的字符串。

答案 1 :(得分:1)

基础知识:

在内存中你可能有这些字节:

0x41, 0x42, 0x0a, 0x00

以十进制表示相同的内存销售为

65, 66, 10, 0

如果 interpteted 为ASCII字符,则

'A', 'B', Newline, EndOfString

如果你想在源代码中表达,你可以写:

string s = "AB\n"; // note: 0x00 is appended automatically

编译器将执行所有转换,并以第一个示例中的字节结束。所以“\ n”只是一种方便的方式将特殊字符Newline /字节0x0A包含在字符串中。

如果您从其他应用程序,通过文件或套接字或其他任何内容收到某些内容,您实际上会收到字节,您的代码可能会以其中一种方式解释如上所述。

请注意:在.Net中我们有UTF字符串,其中每个字符实际上使用16Bit / 2字节,因此上面的解释对C而言是好的,但对于C#而言不是完全为真。但基本原则是相同的。