Подтвердить что ты не робот

С# Преобразование Char в байт (представление шестнадцатеричного)

Это кажется легкой проблемой, но я не могу понять.

Мне нужно преобразовать этот символ < в байте (шестнадцатеричное представление), но если я использую

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

я получаю 60 (десятичное представление) вместо 3c.

4b9b3361

Ответ 1

60 == 0x3C.

У вас уже есть правильный ответ, но вы смотрите на него не так.

0x - шестнадцатеричный префикс
 3C равно 3 x 16 + 12

Ответ 2

Вы можете использовать метод BitConverter.ToString для преобразования массива байтов в шестнадцатеричную строку:

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

или просто:

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

Ответ 3

char ch2 = 'Z';
Console.Write("{0:X} ", Convert.ToUInt32(ch2));

Ответ 4

получить 60 (десятичное представление) вместо 3c.

Нет, вы не получаете никакого представления. Вы получаете значение byte, содержащее значение 60/3c в некотором внутреннем представлении. Когда вы смотрите на него, т.е. Когда вы преобразовываете его в строку (явно с помощью ToString() или неявно), вы получаете десятичное представление 60.

Таким образом, вы должны убедиться, что вы явно конвертируете байт в строку, указываете нужную базу. ToString("x"), например, преобразует число в представление шестнадцатеричное:

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

Ответ 5

Вы хотите преобразовать числовое значение в hex с помощью ToString("x"):

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

Однако имейте в виду, что вы код для преобразования "<" символ для байта будет работать для этого конкретного символа, но он не будет работать для символов, отличных от ANSI (которые не будут помещаться в байт).