C# 中将 char 转换为 int

发布于 2024-07-07 13:44:58 字数 335 浏览 9 评论 0原文

我在 C# 中有一个 char:

char foo = '2';

现在我想将 2 转换为 int。 我发现 Convert.ToInt32 返回 char 的实际十进制值,而不是数字 2。以下内容将起作用:

int bar = Convert.ToInt32(new string(foo, 1));

int.parse 也仅适用于字符串。

C# 中是否没有本地函数可以从 char 转换为 int 而不将其转换为字符串? 我知道这是微不足道的,但奇怪的是没有任何本地东西可以直接进行转换。

I have a char in c#:

char foo = '2';

Now I want to get the 2 into an int. I find that Convert.ToInt32 returns the actual decimal value of the char and not the number 2. The following will work:

int bar = Convert.ToInt32(new string(foo, 1));

int.parse only works on strings as well.

Is there no native function in C# to go from a char to int without making it a string? I know this is trivial but it just seems odd that there's nothing native to directly make the conversion.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

凉城已无爱 2024-07-14 13:46:00

原理:

char foo = '2';
int bar = foo & 15;

ASCII 字符 0-9 的二进制为:

0   -   0011 0000
1   -   0011 0001
2   -   0011 0010
3   -   0011 0011
4   -   0011 0100
5   -   0011 0101
6   -   0011 0110
7   -   0011 0111
8   -   0011 1000
9   -   0011 1001

如果您取每个字符的前 4 个 LSB(使用按位与 8'b00001111 等于 15),您将得到实际的数字 (0000 = 0,0001=1,0010=2,... )

用法:

public static int CharToInt(char c)
{
    return 0b0000_1111 & (byte) c;
}

Principle:

char foo = '2';
int bar = foo & 15;

The binary of the ASCII charecters 0-9 is:

0   -   0011 0000
1   -   0011 0001
2   -   0011 0010
3   -   0011 0011
4   -   0011 0100
5   -   0011 0101
6   -   0011 0110
7   -   0011 0111
8   -   0011 1000
9   -   0011 1001

and if you take in each one of them the first 4 LSB (using bitwise AND with 8'b00001111 that equals to 15) you get the actual number (0000 = 0,0001=1,0010=2,... )

Usage:

public static int CharToInt(char c)
{
    return 0b0000_1111 & (byte) c;
}
递刀给你 2024-07-14 13:45:53

真正的方法是:

int theNameOfYourInt = (int).Char.GetNumericValue(theNameOfYourChar);

“theNameOfYourInt” - 您希望将 char 转换为的 int。

“theNameOfYourChar” - 您想要使用的 Char,因此它将转换为 int。

留下一切。

The real way is:

int theNameOfYourInt = (int).Char.GetNumericValue(theNameOfYourChar);

"theNameOfYourInt" - the int you want your char to be transformed to.

"theNameOfYourChar" - The Char you want to be used so it will be transformed into an int.

Leave everything else be.

天涯离梦残月幽梦 2024-07-14 13:45:48

这将转换为整数并处理 unicode

CharUnicodeInfo.GetDecimalDigitValue('2')

您可以阅读更多内容 此处

This converts to an integer and handles unicode

CharUnicodeInfo.GetDecimalDigitValue('2')

You can read more here.

陌路黄昏 2024-07-14 13:45:43

默认情况下,您使用 UNICODE,因此我建议使用错误的方法

int bar = int.Parse(foo.ToString());

即使下面的数字值对于数字和基本拉丁字符来说是相同的。

By default you use UNICODE so I suggest using faulty's method

int bar = int.Parse(foo.ToString());

Even though the numeric values under are the same for digits and basic Latin chars.

以往的大感动 2024-07-14 13:45:39

试试这个

char x = '9'; // '9' = ASCII 57

int b = x - '0'; //That is '9' - '0' = 57 - 48 = 9

Try This

char x = '9'; // '9' = ASCII 57

int b = x - '0'; //That is '9' - '0' = 57 - 48 = 9
不气馁 2024-07-14 13:45:34
char c = '1';
int i = (int)(c - '0');

你可以用它创建一个静态方法:

static int ToInt(this char c)
{
    return (int)(c - '0');
}
char c = '1';
int i = (int)(c - '0');

and you can create a static method out of it:

static int ToInt(this char c)
{
    return (int)(c - '0');
}
鸵鸟症 2024-07-14 13:45:29

有没有人考虑过像这样使用 int.Parse()int.TryParse()

int bar = int.Parse(foo.ToString());

更好的

int bar;
if (!int.TryParse(foo.ToString(), out bar))
{
    //Do something to correct the problem
}

是这样更安全并且更不容易出错

Has anyone considered using int.Parse() and int.TryParse() like this

int bar = int.Parse(foo.ToString());

Even better like this

int bar;
if (!int.TryParse(foo.ToString(), out bar))
{
    //Do something to correct the problem
}

It's a lot safer and less error prone

征﹌骨岁月お 2024-07-14 13:45:24

有趣的答案,但文档的说法不同:

使用GetNumericValue方法
转换表示的 Char 对象
数字到数值类型。 使用
ParseTryParse 转换
将字符串中的字符转换为 Char
目的。 使用 ToString 转换 Char
对象到 String 对象。

http://msdn.microsoft.com/en-us/library/system .char.aspx

Interesting answers but the docs say differently:

Use the GetNumericValue methods to
convert a Char object that represents
a number to a numeric value type. Use
Parse and TryParse to convert a
character in a string into a Char
object. Use ToString to convert a Char
object to a String object.

http://msdn.microsoft.com/en-us/library/system.char.aspx

漫雪独思 2024-07-14 13:45:18

这会将其转换为 int

char foo = '2';
int bar = foo - '0';

这是有效的,因为每个字符在内部都由一个数字表示。 字符'0''9'是用连续的数字表示的,所以找出字符'0'之间的区别'2' 结果为数字 2。

This will convert it to an int:

char foo = '2';
int bar = foo - '0';

This works because each character is internally represented by a number. The characters '0' to '9' are represented by consecutive numbers, so finding the difference between the characters '0' and '2' results in the number 2.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文