我正在做一個窗體應用程序是Visual C#。我有一個文本框,用戶必須輸入一個數字和一個大寫字母,例如「9D」。字符串文字到字節
我需要做的就是把那封信到一個字節數組作爲一個字節......所以在我的字節數組它會:
array[index] = 0x9D
我知道,文本框類表示9D作爲一個字符串。我很困惑如何使它成爲一個字面字節(9D)並將其粘貼在數組中。
新的.NET。所以任何幫助將不勝感激。我查看了System.Convert類,並沒有看到任何我可以使用的東西。
我正在做一個窗體應用程序是Visual C#。我有一個文本框,用戶必須輸入一個數字和一個大寫字母,例如「9D」。字符串文字到字節
我需要做的就是把那封信到一個字節數組作爲一個字節......所以在我的字節數組它會:
array[index] = 0x9D
我知道,文本框類表示9D作爲一個字符串。我很困惑如何使它成爲一個字面字節(9D)並將其粘貼在數組中。
新的.NET。所以任何幫助將不勝感激。我查看了System.Convert類,並沒有看到任何我可以使用的東西。
使用Byte.Parse(string, NumberStyles)
:
byte b = Byte.Parse(text, NumberStyles.HexNumber);
或者Byte.TryParse(string, NumberStyles, IFormatProvider, out Byte)
以更加妥善地處理無效的輸入。
使用Byte.Parse
將字符串解析爲Byte
。
array[index] = Byte.Parse("9D", NumberStyles.AllowHexSpecifier);
注意,具有前綴0x
會導致解析失敗,所以你可能想,如果它存在剝離出來。
謝謝!這個解決方案也有效。 – brazc0re
如果你想讓它做得更快一點,並允許在數字前面加'0x',你可以使用Convert.ToByte("0x9D", 16)
。在我的有限測試中,Convert.ToByte是Byte.Parse
的兩倍
您也可以使用簡單Regex驗證輸入。這樣你就知道在調用任何方法解析或轉換它之前,字符串將解析。
// 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}$")
測試代碼:
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;
我假設你要正確對待0x9D擁有157是否正確? –
是的,這是正確的。 – brazc0re
您可以使用[System.Convert.ToByte](http://msdn.microsoft.com/en-us/library/c7xhf79k.aspx)方法,指定16作爲您的基地將十六進制字符串轉換爲字節。 – pstrjds