2011-12-08 8 views
5

Tôi đang tạo một ứng dụng biểu mẫu là Visual C#. Tôi có một hộp văn bản nơi người dùng phải nhập một số và một chữ hoa, ví dụ "9D".Chuỗi chữ theo byte

Những gì tôi cần làm là đặt lá thư đó vào một mảng byte như một byte ... như vậy trong mảng byte của tôi nó sẽ:

array[index] = 0x9D 

Tôi biết rằng lớp textbox đại diện cho 9D như là một chuỗi . Tôi đang bối rối về cách làm cho nó thành một byte chữ (9D) và dính nó vào mảng.

Mới đối với. Net để mọi trợ giúp sẽ được đánh giá cao. Tôi đã nhìn vào lớp System.Convert và không thấy bất cứ điều gì tôi có thể sử dụng.

+0

Tôi giả sử bạn muốn để điều trị 0x9D có 157 có đúng không? –

+0

Vâng, đó là chính xác. – brazc0re

+0

Bạn có thể sử dụng phương pháp [System.Convert.ToByte] (http://msdn.microsoft.com/en-us/library/c7xhf79k.aspx), chỉ định '16' làm cơ sở của bạn để chuyển đổi chuỗi Hex thành byte. – pstrjds

Trả lời

6

Sử dụng Byte.Parse(string, NumberStyles):

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

Hoặc Byte.TryParse(string, NumberStyles, IFormatProvider, out Byte) để duyên dáng hơn xử lý đầu vào không hợp lệ.

+0

Cảm ơn bạn. Byte.Parse (văn bản, NumberStyles.HexNumber) đã làm chính xác những gì tôi muốn! – brazc0re

+2

@ brazc0re - Tôi đặc biệt khuyên bạn nên sử dụng TryParse nếu không ứng dụng của bạn S CR CHÉP nếu chuỗi không thể chuyển đổi thành số 16 cơ sở. –

+0

Cảm ơn bạn đã gợi ý Ramhound. Tôi sẽ sử dụng TryParse thay vào đó và xử lý các lỗi bằng cách thử, nắm bắt tương ứng. – brazc0re

1

Sử dụng Byte.Parse để phân tích chuỗi thành Byte.

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

Lưu ý rằng có tiền tố 0x sẽ gây ra phân tích cú pháp không thành công, vì vậy bạn có thể muốn phân tích cú pháp nếu nó tồn tại.

+0

Cảm ơn! Giải pháp này cũng làm việc. – brazc0re

4

Nếu bạn muốn thực hiện nhanh hơn một chút và để cho phép '0x' ở phía trước số bạn có thể sử dụng Convert.ToByte("0x9D", 16). Trong thử nghiệm giới hạn của tôi, Convert.ToByte nhanh gấp hai lần là Byte.Parse

Bạn cũng có thể xác thực đầu vào bằng cách đơn giản Regex. Bằng cách này bạn biết chuỗi sẽ phân tích cú pháp trước khi gọi bất kỳ phương thức nào để phân tích cú pháp hoặc chuyển đổi nó.

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

mã kiểm tra:

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;