2011-12-08 28 views
5

私はフォームアプリケーションを作成しているのはVisual C#です。私は、ユーザが数字と大文字を入力しなければならないテキストボックスを持っています、例 "9D"。バイト文字列リテラル

私はそれが希望私のバイト配列でそう...バイトとしてバイト配列にその手紙を入れて行うために必要なもの:私は、テキストボックスのクラスは文字列として9Dを表していることを知っている

array[index] = 0x9D 

。私はそれをリテラルバイト(9D)にして配列に貼り付ける方法を混乱させています。

.Netの新機能ですので、どんな助力にも感謝します。私はSystem.Convertクラスを見て、私が使用できるものは何も見ていません。

+0

は157正しいがありますか? –

+0

はい、正しいです。 – brazc0re

+0

[System.Convert.ToByte](http://msdn.microsoft.com/en-us/library/c7xhf79k.aspx)メソッドを使用して、16進数文字列をバイトに変換するベースとして '16'を指定できます。 – pstrjds

答えて

6

使用Byte.Parse(string, NumberStyles)

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

それともByte.TryParse(string, NumberStyles, IFormatProvider, out Byte)は、より優雅に無効な入力を処理します。

+0

ありがとうございます。 Byte.Parse(text、NumberStyles.HexNumber)は、私が望むものを正確に行いました! – brazc0re

+2

@ brazc0re - TryParseを使用することを強くお勧めします。それ以外の場合は、文字列を基数16に変換できない場合、アプリケーションはクラッシュします。 –

+0

Ramhoundのご提案ありがとうございます。代わりにTryParseを使用し、tryでエラーを処理し、それに応じてキャッチします。 – brazc0re

1

Byte.Parseを使用して、文字列を解析してByteにします。

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

プレフィックス0xを持つことができないので、あなたはそれが存在する場合、それを取り除くしたい場合があり、パースの原因となりますので注意してください。

+0

ありがとう!この解決策も働いた。 – brazc0re

4

もう少し速くしたい場合は、数字の前に「0x」を付けてください。Convert.ToByte("0x9D", 16)を使用してください。私の限られたテストでは、Convert.ToByteは二倍の速あなたはまた、簡単なRegexで入力を検証することができますByte.Parse

ようでした。このようにして、解析または変換するメソッドを呼び出す前に文字列が解析されることがわかります。

// 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}$") 

テストコード:私はあなたが0x9Dを扱いたいと仮定

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; 
関連する問題