首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从数字派生的字符串对char元素的不正确转换

从数字派生的字符串对char元素的不正确转换
EN

Stack Overflow用户
提问于 2022-06-17 06:19:13
回答 2查看 62关注 0票数 0
代码语言:javascript
复制
static void Main()
{
    int a = 612345;
    string b = Convert.ToString(a);
    char c = Convert.ToChar(b[0]);
    int d = Convert.ToInt32(c);
    Console.WriteLine(d);
}

在做这个操作时,我想得到输出"6",但我得到"54“。使用调试器完成程序时,我看到了这个。

如果数组的零元素是char c,那么54通常取数字为6吗?我怎么才能解决这个问题?

我事先道歉,如果我的问题似乎愚蠢和不正确的人,我是新手编程。(但我明白,从实际的角度来看,所有这些转变都是毫无意义的。这正是更好地理解语言的学习任务)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-17 08:13:14

每个字符都有一个代码,一些字符有相应的数字值。

代码语言:javascript
复制
char : code : value
-------------------
 '0' :   48 :     0
 '6' :   54 :     6
 'A' :   65 :    -1 (default value when character doesn't have numeric value)
 '¾' :  190 :  0.75 (note, that numeric value is a floating point value here) 

到目前为止,获得数值的最精确的方法是char.GetNumericValue

代码语言:javascript
复制
char c = '¾';
      
double result = char.GetNumericValue(c);

但是,在'0' .. '9'范围内,您可以将其放在c - '0'中。

代码语言:javascript
复制
char c = '6';
      
int result = c - '0';

在你的情况下

代码语言:javascript
复制
int d = b[0] - '0';

替代方案

代码语言:javascript
复制
int d = (int) char.GetNumericValue(b, 0);
票数 1
EN

Stack Overflow用户

发布于 2022-06-17 06:27:05

54是6的ASCII代码,你的问题是因为一个字符和一个小整数并没有那么大的不同。取而代之的是这样做:

代码语言:javascript
复制
int a = 612345;
string b = a.ToString();
int d = Int32.Parse(b[0].ToString());
Console.WriteLine(d);

您可以在几乎所有的ToString()上调用C#,这样转换就容易了。使用Int32.Parse将char转换为int,并调用char上的ToString使Parse接受它,因为它不需要char。

编辑以查看char实际上只是一个整数,您实际上可以像下面这样修改原始代码:

代码语言:javascript
复制
int d = Convert.ToInt32(c)-'0';

还能拿到6块。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72655079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档