【问题标题】:Problems parsing through string in C#在 C# 中通过字符串解析的问题
【发布时间】:2013-02-03 08:23:07
【问题描述】:

我正在尝试解析字符串的前三个字符。

public List<string> sortModes(List<string> allModesNonSorted)
{
     foreach (string s in allModesNonSorted)
     {
         char firstNumber  = s[0];
         char secondNumber = s[1];
         char thirdNumber  = s[2];

         char.IsDigit(firstNumber);
         char.IsDigit(secondNumber);
         char.IsDigit(thirdNumber);

         combinedNumbers = Convert.ToInt16(firstNumber) + Convert.ToInt16(secondNumber) + Convert.ToInt16(thirdNumber);
     }
     return allModesNonSorted;
}

它正确识别每个字符,但添加了一个额外的值 53 或 55。下面当我添加数字时,包括 53 和 55。为什么要这样做??

【问题讨论】:

  • 这不是“添加”额外的值。字符串的前两个字符是“5”和“7”,它们的 Unicode 值是 53 和 55。这些值就是正在显示的值。

标签: c# char


【解决方案1】:

53 是 '5' 的 Unicode 值,55 是 '7' 的 Unicode 值。它向您显示数据的数字和字符版本。

您会注意到secondNumber 您会看到二进制值 0 和字符值 '\0'。

如果要将字符串解释为整数,可以使用

int myInteger = int.Parse(myString);

特别是如果你知道你总是有格式

input = "999 Hz Bla bla"

你可以这样做:

int firstSeparator = input.IndexOf(' ');
string frequency = input.Substring(firstSeparator);
int numericFrequency = int.Parse(frequency);

无论频率中有多少个数字,只要数字后跟一个空格字符,这都会起作用。

【讨论】:

    【解决方案2】:

    因为您将它们视为角色。

    字符 '5' 依次是 ASCII 中的第 53 个字符。

    最简单的解决方案是从所有字符中减去字符“0”,这将为您提供单个字符的数值。

    【讨论】:

      【解决方案3】:

      53 是字符 '5' 的 ASCII 值 57 是字符 '7' 的 ASCII 值

      这只是 Visual Studio 向您展示有关实际值的更多详细信息。

      您可以继续使用您的代码。

      【讨论】:

        【解决方案4】:

        5355 是 '5' 和 '7' 字符的 ASCII 值(字符在内存中的存储方式)。

        如果您需要将它们转换为整数,请查看this SO post

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-11-16
          • 1970-01-01
          • 1970-01-01
          • 2020-06-13
          • 2018-11-29
          • 1970-01-01
          • 2013-02-18
          • 1970-01-01
          相关资源
          最近更新 更多