【问题标题】:How to convert a byte to a char, e.g. 1 -> '1'?如何将字节转换为字符,例如1 -> '1'?
【发布时间】:2012-05-25 20:09:12
【问题描述】:

如何将字节转换为字符?我的意思不是 ASCII 表示。 我有一个byte 类型的变量,并希望它作为一个字符。

我只想要以下从字节到字符的转换:
0 ->'0'
1 ->'1'
2 ->'2'
3 ->'3'
4 ->'4'
5 ->'5'
6 ->'6'
7 ->'7'
8 ->'8'
9 ->'9'

(char)1Convert.ToChar(1) 不起作用。他们导致'',因为他们认为1是ASCII码。

【问题讨论】:

  • @TuTran 是的。在我的例子中,字节变量只是 0 到 9 之间的一个数字。
  • @Cicada 解决方案的变体:byteVariable.ToString().Single() – 使用System.Linq;如果变量超过9,将抛出异常。
  • @JeppeStigNielsen 谢谢,我将使用Single() - 只是为了确定。

标签: c# char byte


【解决方案1】:

号码.ToString();

one.ToString(); // one.ToString()[0] - first char -'1'
two.ToString(); // two.ToString()[0] - first char -'2'

请注意,您不能真正将 byte 转换为 char
char 是一个字符,而字节甚至可以是三个数字值!


如果你想使用LINQ 并且你确定字节不会超过一位(10+)你可以使用这个:

number.ToString().Single();

【讨论】:

  • 我不敢相信有这么多令人费解的答案,而且他们的分数比这个更高!
  • @gdoron 评论您的笔记:在我的情况下没问题,因为我只有一位数字。所以就我而言可以写:one.ToString()[0] 或@JeppeStigNielsen 的提示one.ToString().Single()
  • A byte (System.Byte) 不能有负值。那是sbyte
【解决方案2】:

只需使用variable.ToString() 就足够了。如果你想花哨,在转换前将0的ASCII码添加到变量中:

Convert.ToChar(variable + Convert.ToByte('0'));

【讨论】:

  • 如何将字节转换为字符? 10+ 值呢?
  • @gdoron:当然是将字节的值作为 BMP 中字符的序数。这个问题清楚地表明我们对 10 多个值不感兴趣。
【解决方案3】:

使用它进行转换。

(char)(mybyte + 48); 

其中mybyte = 0 或 1 等等

Convert.ToChar(1 + 48); // specific case for 1

虽然其他人已经给出了解决方案,但我会告诉你为什么你的 (char)1Convert.ToChar(1) 不起作用。

当您将字节 1 转换为 char 时,它会将 1 作为 ASCII 值。

现在ASCII of 1 != 1

在其中添加 48,因为 ASCII 为 1 == 1 + 48`。 0、2等类似情况。

【讨论】:

    【解决方案4】:

    假设你有变量byte x; 只需使用(char)(x + '0')

    【讨论】:

    • xbyte。当你 cmets 时,当 x i 大于 9 时会发生什么?你会得到一些 ascii 代码。
    • @gdoron: 抱歉用了int,但是作者说的只是0到9,所以不会出现你提到的情况
    【解决方案5】:

    使用 Convert.ToString() 来执行此操作。

    【讨论】:

    • 为什么convert.ToString() 而不仅仅是.Tostring()...:)
    • byte 怎么可能是null?这是struct。来自 MSDN “此实现与 Byte.ToString() 相同。” source
    猜你喜欢
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 2010-09-24
    • 2013-11-23
    • 2022-01-23
    相关资源
    最近更新 更多