C#。当我使用 TextReader.Read() 它返回一个 int 值时怎么会?可以转换为char吗?

Posted

技术标签:

【中文标题】C#。当我使用 TextReader.Read() 它返回一个 int 值时怎么会?可以转换为char吗?【英文标题】:C#. How come when I use TextReader.Read() it returns an int value? Possible to convert to char? 【发布时间】:2011-09-23 04:23:05 【问题描述】:

所以 TextReader.ReadLine() 返回一个字符串,但 TextReader.Read() 返回一个 int 值。这个 int 值似乎也是某种我不认识的格式。是否可以将此整数转换为字符?感谢您的帮助。

编辑:

TextReader 值 = new StreamReader(@"txt");

    string SValue1;
    int Value1;       
    Value1 = Values.Read();        
    Console.WriteLine(Value1);
    Console.ReadKey();

当它读出值时,它会给我 51 作为输出。 txt文件的第一个字符是3,为什么会这样呢?

【问题讨论】:

Int to Char in C#的可能重复 【参考方案1】:

根据the documentation for the StringReader class(TextReader的子类),Read()的返回值可以转换为char,但需要先检查是否在文件/字符串的末尾(通过检查 -1)。例如,在文档中修改的代码中:

while (true)

    int integer = stringReader.Read();

    // Check for the end of the string before converting to a character.
    if (integer == -1)
        break;

    char character = (char) integer; // CONVERT TO CHAR HERE

    // do stuff with character...

【讨论】:

感谢帮助 =] 为什么读取的值最初只是一个数字存在?【参考方案2】:

文档告诉您:如果没有更多数据要读取,则返回 -1,否则返回字符,作为整数。整数不是“某种格式”;整数是原始数据。相反,它是“格式化”的字符;磁盘上的字节必须被解释为字符。

在检查了 -1(它不是一个有效的字符值并且代表流的结束 - 这就是该方法以这种方式工作的原因:因此您可以检查)之后,您可以通过简单的强制转换来转换。

【讨论】:

【参考方案3】:

Read 返回一个int o 可以检测到流结束 (-1)。是的,您只需将结果转换为 var c = (int) reader.Read(); 中的字符即可。

典型用法:

while (true)

    int x = reader.Read();
    if (x == -1) break;
    char c = (char) x;
    // Handle the character

【讨论】:

以上是关于C#。当我使用 TextReader.Read() 它返回一个 int 值时怎么会?可以转换为char吗?的主要内容,如果未能解决你的问题,请参考以下文章

当我在 viewcontroller 上使用 3 视图时,目标 c 会变慢

当我想在目标 c 项目中使用 swift 文件时使用未声明的标识符

当我尝试使用文件维度作为行和列在 C 中创建矩阵时,为啥会出现错误?

当我在 Vim 编辑器中以交互方式执行 c/c++ 中的 wq 时,我可以使用 cppcheck

当我使用 Request.ServerVariables("CERT_SUBJECT") 时,值 C=US 是啥意思?

“错误:分配给带有数组类型错误的表达式”当我分配结构字段时(C)