23

这似乎是一个简单的问题,但我无法弄清楚。

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

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

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

4

5 回答 5

25

60 == 0x3C.

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

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

于 2012-09-21T09:31:05.240 回答
16

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

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

或者简单地说:

string hex = Convert.ToByte('<').ToString("x2");
于 2012-09-21T09:22:02.427 回答
6
char ch2 = 'Z';
Console.Write("{0:X} ", Convert.ToUInt32(ch2));
于 2012-09-21T09:23:56.283 回答
4

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

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

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

byte b = Convert.ToByte('<');  
String hex = b.ToString("x");
于 2012-09-21T09:25:26.637 回答
2

您想使用以下方法将数值转换为十六进制ToString("x")

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

但是,请注意,将“<”字符转换为字节的代码将适用于该特定字符,但不适用于非 ANSI 字符(不适合字节)。

于 2012-09-21T09:22:51.320 回答