【问题标题】:C# Convert Char to Byte (Hex representation)C# 将字符转换为字节(十六进制表示)
【发布时间】:2012-09-13 17:00:47
【问题描述】:

这似乎是一个简单的问题,但我想不通。

我需要将此字符 转换为字节(十六进制表示),但如果我使用

byte b = Convert.ToByte('<');

我得到 60(十进制表示)而不是 3c

【问题讨论】:

    标签: c# byte type-conversion hex


    【解决方案1】:

    60 == 0x3C

    您已经有了正确的答案,但您以错误的方式看待它。

    0x 是十六进制前缀
    3C 是 3 x 16 + 12

    【讨论】:

      【解决方案2】:

      您想使用ToString("x") 将数值转换为十六进制:

      string asHex = b.ToString("x");
      

      但是,请注意,将“

      【讨论】:

        【解决方案3】:

        得到 60(十进制表示)而不是 3c。

        不,你没有得到任何代表。你会得到一个byte,其中包含一些 internal 表示形式的值 60/3c。当您查看它时,即当您将其转换为字符串时(显式地使用ToString() 或隐式地),您会得到十进制表示 60

        因此,您必须确保明确将字节转换为字符串,指定所需的基数ToString("x"),例如会将数字转换为十六进制表示:

        byte b = Convert.ToByte('<');  
        String hex = b.ToString("x");
        

        【讨论】:

          【解决方案4】:
          char ch2 = 'Z';
          Console.Write("{0:X} ", Convert.ToUInt32(ch2));
          

          【讨论】:

            【解决方案5】:

            您可以使用BitConverter.ToString 方法将字节数组转换为十六进制字符串:

            string hex = BitConverter.ToString(new byte[] { Convert.ToByte('<') });
            

            或者简单地说:

            string hex = Convert.ToByte('<').ToString("x2");
            

            【讨论】:

            • 谢谢,但我需要一个字节,如果转换后我使用 byte[] b = ASCIIEncoding.ASCII.GetBytes(hex);我得到一个包含 51 和 67 个值的字节数组。我需要 3c。
            • 如果您需要一个字节,请不要调用.ToString,只需:byte b = Convert.ToByte('&lt;');GetBytes 方法也不会像您认为的那样做。它不需要一个十六进制字符串。它需要一个简单的字符串,其中每个字符都使用指定的编码转换为一个字节——它与十六进制无关。如果要从十六进制字符串中获取原始字节数组,应执行以下操作:stackoverflow.com/a/311179/29407
            猜你喜欢
            • 1970-01-01
            • 2018-01-31
            • 1970-01-01
            • 1970-01-01
            • 2017-08-23
            • 2017-06-17
            • 2023-03-07
            • 2022-06-18
            • 1970-01-01
            相关资源
            最近更新 更多