2011-12-08 16 views
5

sto facendo una domanda di forme è Visual C#. Ho una casella di testo in cui un utente deve inserire un numero e una lettera maiuscola, ad esempio "9D".String letterale byte

Che cosa devo fare è mettere quella lettera in un array di byte come un byte ... quindi a mio array di byte sarebbe:

array[index] = 0x9D 

So che la classe di testo rappresenta la 9D come una stringa . Sono confuso su come trasformarlo in un byte letterale (9D) e inserirlo nell'array.

Nuovo per .Net in modo che qualsiasi aiuto sarebbe apprezzato. Ho esaminato la classe System.Convert e non vedo nulla che possa essere utilizzato.

+0

suppongo si vuole trattare 0x9D ha 157 corretta? –

+0

Sì, è corretto. – brazc0re

+0

È possibile utilizzare il metodo [System.Convert.ToByte] (http://msdn.microsoft.com/en-us/library/c7xhf79k.aspx), specificare '16' come base per convertire stringhe esadecimali in byte. – pstrjds

risposta

6

Uso Byte.Parse(string, NumberStyles):

byte b = Byte.Parse(text, NumberStyles.HexNumber); 

O Byte.TryParse(string, NumberStyles, IFormatProvider, out Byte) per gestire con più garbo input non valido.

+0

Grazie. Byte.Parse (text, NumberStyles.HexNumber) ha fatto esattamente quello che volevo! – brazc0re

+2

@ brazc0re - Suggerisco caldamente di utilizzare TryParse altrimenti l'applicazione CRASH si verificherà se la stringa non può essere convertita in un numero base 16. –

+0

Grazie per il suggerimento Ramhound. Userò TryParse invece e gestirò gli errori con il try, catturerò di conseguenza. – brazc0re

1

Usa Byte.Parse per analizzare una stringa in un Byte.

array[index] = Byte.Parse("9D", NumberStyles.AllowHexSpecifier); 

Nota che avere il prefisso 0x causerà un parse fallire, quindi si consiglia di striscia fuori se esiste.

+0

Grazie! Anche questa soluzione ha funzionato. – brazc0re

4

Se si voleva fare un po 'più veloce e per consentire '0x' davanti al numero che si può usare Convert.ToByte("0x9D", 16). Nei miei test limitati, Convert.ToByte era due volte più veloce di Byte.Parse

È inoltre possibile convalidare l'input con un semplice Regex. In questo modo saprai che la stringa verrà analizzata prima di chiamare qualsiasi metodo per analizzarlo o convertirlo.

// Checks that the string is either 2 or 4 characters and contains only valid hex 
var regex = new Regex(@"^(0x)*[a-fA-F\d]{2}$") 

Codice di prova:

const int count = 100000; 
var data = "9D"; 
var sw = new Stopwatch(); 
sw.Reset(); 

byte dest = 0; 
sw.Start(); 
for(int i=0; i < count; ++i) 
{ 
    dest = Byte.Parse(data, NumberStyles.AllowHexSpecifier); 
} 
sw.Stop(); 
var parseTime = sw.ElapsedMilliseconds; 
sw.Reset(); 
sw.Start(); 
for(int i=0; i < count; ++i) 
{ 
    dest = Convert.ToByte(data, 16); 
} 
sw.Stop(); 
var convertTime = sw.ElapsedMilliseconds; 
Problemi correlati