Ответ 1
60 == 0x3C
.
У вас уже есть правильный ответ, но вы смотрите на него не так.
0x
- шестнадцатеричный префикс
3C
равно 3 x 16 + 12
Это кажется легкой проблемой, но я не могу понять.
Мне нужно преобразовать этот символ < в байте (шестнадцатеричное представление), но если я использую
byte b = Convert.ToByte('<');
я получаю 60 (десятичное представление) вместо 3c.
60 == 0x3C
.
У вас уже есть правильный ответ, но вы смотрите на него не так.
0x
- шестнадцатеричный префикс
3C
равно 3 x 16 + 12
Вы можете использовать метод BitConverter.ToString
для преобразования массива байтов в шестнадцатеричную строку:
string hex = BitConverter.ToString(new byte[] { Convert.ToByte('<') });
или просто:
string hex = Convert.ToByte('<').ToString("x2");
char ch2 = 'Z';
Console.Write("{0:X} ", Convert.ToUInt32(ch2));
получить 60 (десятичное представление) вместо 3c.
Нет, вы не получаете никакого представления. Вы получаете значение byte
, содержащее значение 60/3c в некотором внутреннем представлении. Когда вы смотрите на него, т.е. Когда вы преобразовываете его в строку (явно с помощью ToString()
или неявно), вы получаете десятичное представление 60.
Таким образом, вы должны убедиться, что вы явно конвертируете байт в строку, указываете нужную базу. ToString("x")
, например, преобразует число в представление шестнадцатеричное:
byte b = Convert.ToByte('<');
String hex = b.ToString("x");
Вы хотите преобразовать числовое значение в hex с помощью ToString("x")
:
string asHex = b.ToString("x");
Однако имейте в виду, что вы код для преобразования "<" символ для байта будет работать для этого конкретного символа, но он не будет работать для символов, отличных от ANSI (которые не будут помещаться в байт).