我们在一个项目中有这个相当简单的代码:
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/