c# - (byte)Convert.ToChar(anyStringOfLengthOne) 怎么可能抛出错误?

标签 c# .net string char byte

我们在一个项目中有这个相当简单的代码:

string input = "Any string";
for (int i = 0; i < input.Length; i++)
{
    string stringOfLengthOne = input.Substring(i, 1);
    byte value = (byte)Convert.ToChar(stringOfLengthOne);
    if (value == someValue)
    {
        // do something
    }
}

输入是一个字符串,其中包含通常从需要根据字节值进行处理的文件中读取的字符。

不幸的是,我们没有机会逐步调试这个过程,我们只需要有根据地猜测什么样的字符串会导致

 (byte)Convert.ToChar(anyStringOfLengthOne)

在上面的代码中抛出“算术运算导致溢出”错误。

我的想法是,一旦我有了一个字符串,就应该总是可以 1. 选择一个字符,然后 2. 将它转换为一个字节。然而错误发生了。

任何想法,提示?或者有人甚至可以提供引发此类错误的字符串吗?

最佳答案

.Net 中的字符长度为 16 位(短/短)。

C# 的默认项目设置意味着转换会起作用,并且只会忽略任何大于 255 的字符的高位,例如使用 (byte) (c & 0xff)

但是,如果您使用的是检查算术,尝试转换大于 255 的字符将导致 ArithmeticOverflowExcetion。

算术的默认设置可以在项目的build设置中设置为选中/未选中。

例子

char c = (char) 300;
byte b = unchecked ((byte) c);
Console.WriteLine (b);

// Result: 44

char c = (char) 300;
byte b = checked ((byte) c);
Console.WriteLine (b);

// Result: ArithmeticOverflowExcetion

备选

或者,您可以直接比较字符。

例如测试一个字符是否为0-9

char c = input[i];
if (c >= '0' && c <= '9') {
    // do something
}

您甚至可以将 char 与 int 进行比较

char c = input[i];
if (c >= 48 && c <= 57) {
    // do something
}

关于c# - (byte)Convert.ToChar(anyStringOfLengthOne) 怎么可能抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8340900/

相关文章:

c# - 获取三角形内的所有点

c# - 如何从资源的字符串名称获取资源的值

.net - 软件带宽/数据库增长公式

java - 使用返回的字符串来调用方法?

c# - 没有外部登录提供程序的 ASP.NET Core MVC 2.2 登录

c# - 如何将示例(虚拟)数据添加到单元测试中?

c# - 从 Windows 中选择声音并播放

c# - 为什么是 String.IsNullOrEmpty(str) 而不是 str.IsNullOrEmpty()?

PHP 转义一个字符串,如果它还没有被实体转义的话

python - 将 pandas 中的 float 转换为字符串时精度损失