2011-10-24 39 views
8

thể trùng lặp:
How do you convert Byte Array to Hexadecimal String, and vice versa, in C#?
Convert hex string to byte arrayString để mảng byte

Tôi đã một chuỗi như thế này: "021500010000146DE6D800000000000000003801030E9738"

Những gì tôi cần là những điều sau đây mảng byte: 02 15 00 01 00 00 14 6D E6 D 8 00 00 00 00 00 00 00 00 38 01 03 0E 97 38 (mỗi cặp là giá trị thập lục phân trong byte tương ứng).

Bất kỳ ý tưởng nào về cách tôi có thể thực hiện chuyển đổi này ?? Cảm ơn!!

+0

Bạn đã viết để làm một cái gì đó? –

+1

"Có thể trùng lặp" là một câu hỏi hoàn toàn khác. Anh ta không hỏi làm thế nào để mã hóa chuỗi thành một 'byte []' bằng cách sử dụng một số mã hóa. Chuỗi ở đây chứa các giá trị hệ thập lục phân cần được chuyển đổi thành 'byte []'. – svick

+0

Tôi không thấy các câu hỏi này trùng lặp chính xác như thế nào. – vcsjones

Trả lời

5
var arr = new byte[s.Length/2]; 
for (var i = 0 ; i<arr.Length ; i++) 
    arr[i] = (byte)Convert.ToInt32(s.SubString(i*2,2), 16); 
+0

Mã này thực sự hoạt động tốt. Nhưng chỉ một chi tiết, mã phải là "s.Substring". Cảm ơn tất cả. – Manu

+0

Có thể sử dụng Convert.ToByte thay vì ToInt32. – mikeazo

1

Bạn khá muốn ví dụ thứ hai về số page này.
Phần quan trọng là:

Convert.ToInt32(hex, 16); 

Tham số đầu tiên là một chuỗi 2 ký tự, chỉ định một hex-giá trị (ví dụ "DE").
Tham số thứ hai chỉ định để chuyển đổi từ Base-16, đó là Hex.

Tách chuỗi thành các đoạn gồm hai ký tự không được hiển thị trong ví dụ này, nhưng cần thiết cho sự cố của bạn. Tôi tin tưởng nó đủ đơn giản để bạn có thể xử lý.

Tôi thấy điều này với Google: "C# parse hex"

1
string str = "021500010000146DE6D800000000000000003801030E9738"; 
    List<byte> myBytes = new List<byte>(); 

    try 
    { 
     while (!string.IsNullOrEmpty(str)) 
     { 
      myBytes.Add(Convert.ToByte(str.Substring(0, 2), 16)); 
      str = str.Substring(2); 
     } 
    } 
    catch (FormatException fe) 
    { 
     //handle error 
    } 
    for(int i = 0; i < myBytes.Count; i++) 
    { 
     Response.Write(myBytes[i].ToString() + "<br/>"); 
    } 
+0

'Convert.ToByte' một 'int'? Ý tôi là, tối ưu hóa sớm là xấu và tất cả, nhưng khi cách tiếp cận đơn giản nhất cũng nhanh hơn ... –

+0

@BenVoigt Ah, tôi thấy rằng chức năng phù hợp để thực hiện trong một chuyển đổi. Cảm ơn! –