【问题标题】:Why numbers converted from char to int are different than before conversion?为什么从 char 转换为 int 的数字与转换前不同?
【发布时间】:2023-01-06 21:21:52
【问题描述】:

所以,正如标题所说,我无法将数字从 char 转换为整数。难道我做错了什么?

Console.Clear();
int hourBin1 = 0, hourBin2 = 0, minuteBin1 = 0, minuteBin2 = 0, secondBin1 = 0, secondBin2 = 0;
int iteration=0;
void conversion(int variable){
    int i=0;
    int[] table = new int[6];
    while(variable>0){
        table[i]=variable%2;
        Console.WriteLine($"{i} {variable} {table[i]}");
        variable/=2;
        i++;
    }
    int result = 0;
    for(int j=i-1;j>=0;j--){
        result*=10;
        result+=table[j];
    }
    if(iteration==0){
        hourBin1=result;
        iteration++;
    }else if(iteration==1){
        hourBin2=result;
        iteration++;
    }else if(iteration==2){
        minuteBin1=result;
        iteration++;
    }else if(iteration==3){
        minuteBin2=result;
        iteration++;
    }else if (iteration==4){
        secondBin1=result;
        iteration++;
    }else if (iteration==5){
        secondBin2=result;
        iteration++;
    }
}
Console.Write("enter date in HH:MM:SS format to convert: ");
string numberString = Console.ReadLine()!.Trim();
char[] separation = numberString.ToCharArray();
foreach (var x in separation){
    Console.Write($"{x} ");
}
int hour1 = Convert.ToInt16(separation[0]);
int hour2 = Convert.ToInt16(separation[1]);
int minute1 = Convert.ToInt16(separation[3]);
int minute2 = Convert.ToInt16(separation[4]);
int second1 = Convert.ToInt16(separation[6]);
int second2 = Convert.ToInt16(separation[7]);
Console.WriteLine("converting to binary system");
conversion(hour1);
conversion(hour2);
conversion(minute1);
conversion(minute2);
conversion(second1);
conversion(second2);
Console.WriteLine($"\n{hour1} {hour2} {minute1} {minute2} {second1} {second2}");
Console.WriteLine($"hourBin1}\n{hourBin2}\n{minuteBin1}\n{minuteBin2}\n{secondBin1}\n{secondBin2}");

例如:

“12:23:34”的控制台输出如下所示:

1 2 : 2 3 : 3 4 49 50 50 51 51 52

我希望它看起来像这样:

1 2 : 2 3 : 3 4 1 2 2 3 3 4

最终输出如下所示:

49 50 50 51 51 52 110001 110010 110010 110011 110011 110100

我希望它看起来像这样:

1 2 2 3 3 4 0001 0010 0010 0011 0011 0100

PS 由于某种原因,表格不能取小于 6 的值,有什么想法吗?

【问题讨论】:

  • 输入正确的Alt+4+9。 Unicode 字符“1”位于代码点 49。
  • 这样做:int hour1 = Convert.ToInt16(separation[0].ToString());

标签: c# integer char console-application


【解决方案1】:

基本上有等效的 ASCII 值,您只需从每个值中减去 48,即可得到准确的值。 char 1 的 ASCII 值为 49。

int hour1 = Convert.ToInt16(separation[0]) - 48;

【讨论】:

  • 请不要称其为 ASCII,尽管它是向后兼容的,但 Unicode 已经存在了三十年。
  • @CodeCaster 是的,你是对的:)
  • 哦,好吧,它起作用了,但是有没有一种方法可以在不减法的情况下立即赋值?
猜你喜欢
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 2013-10-05
  • 2011-11-20
  • 1970-01-01
  • 2017-03-21
  • 2014-12-27
相关资源
最近更新 更多