2012-09-21 13 views

Odpowiedz

19

60 == 0x3C.

Masz już poprawną odpowiedź, ale patrzysz na nią w niewłaściwy sposób.

0x jest prefiks szesnastkowym
3C wynosi 3 x 16 + 12

+0

Dziękuję, to jest droga. – DropTheCode

10

Można użyć metody BitConverter.ToString przekonwertować tablicę bajtów do szesnastkowym wyrażenie:

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

lub po prostu:

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

Dzięki ale trzeba bajt, jeśli po konwersji użyć bajt [b] = ASCIIEncoding.ASCII.GetBytes (Hex); otrzymuję tablicę bajtów z 51 i 67 wartościami. Potrzebuję 3c. – DropTheCode

+0

Jeśli potrzebujesz bajtu, nie wywołuj '.ToString', po prostu:' byte b = Convert.ToByte ('<'); '. Również metoda 'GetBytes' nie robi tego, co myślisz. Nie oczekuje ciągu szesnastkowego. Oczekuje prostego łańcucha, w którym każdy znak jest konwertowany na bajt przy użyciu określonego kodowania - nie ma nic wspólnego z hexem. Powinieneś wykonać następujące czynności, jeśli chcesz uzyskać oryginalną tablicę bajtów z ciągu szesnastkowego: http: // stackoverflow.com/a/311179/29407 –

3

chcesz przekonwertować wartość numeryczną hex za pomocą ToString("x"):

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

Pamiętaj jednak, że kodujesz przekształcenie znaku "<" na bajt będzie działało dla tej konkretnej litery, ale nie będzie działać dla znaków spoza ANSI (które nie zmieszczą się w bajcie).

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

się 60 (reprezentację dziesiętny) 3C.

Nie, nie otrzymujesz żadnej reprezentacji. Otrzymasz byte zawierający wartość 60/3c w wewnętrznej reprezentacji . Po uzyskaniu spójrz na to, tj. Po przekonwertowaniu go na ciąg (jawnie z ToString() lub niejawnie), otrzymasz dziesiętną reprezentację .

Zatem, trzeba upewnić się, że wyraźnie przekonwertować bajt na ciąg, określając podstawę chcesz. ToString("x"), na przykład konwertuje liczbę na szesnastkowym reprezentacji:

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