2011-12-31 92 views
5

Tôi có mảng chuỗi, mỗi phần tử mảng là một hexString bao gồm 2 ký tự.chuyển đổi mảng chuỗi thành mảng byte

Ví dụ mảng có thể là:

String a = {"aa","ff","00",.....} 

Làm thế nào tôi có thể chuyển đổi mảng này của chuỗi thành một mảng byte trong Java?

+2

Tôi nghĩ rằng đặt cược tốt nhất của bạn là tạo một mảng byte có cùng kích thước với mảng String, sử dụng vòng lặp for và bên trong cuộc gọi vòng lặp 'myBytes [i] = Byte.parseByte (myStrings [i], 16) 'để phân tích mỗi mục Chuỗi thành một byte (** Chỉnh sửa: ** oops, quên cơ số!). –

+0

http://stackoverflow.com/questions/5425830/convert-the-hexadecimal-string-representation-of-some-bytes-into-a-byte-array-in sử dụng liên kết này, gần giống với câu hỏi – dantuch

+0

@HovercraftFullOfEels - bạn nên đăng nó như một câu trả lời. – ziesemer

Trả lời

0

Nếu tôi hiểu chính xác, bạn cần biểu diễn byte của các chuỗi được nối? Một cái gì đó như:

public byte[] getBytes(String[] array) { 
    StringBuilder builder = new StringBuilder(); 
    for(String s: array) { 
     builder.append(s); 
    } 
    return builder.toString().getBytes(); 
} 
+2

Một lần nữa, không phải là các byte được phân tích cú pháp. 'getBytes()' không phân tích các chuỗi riêng lẻ thành biểu diễn byte của chúng mà thay vào đó sử dụng mã hóa bảng mã mặc định của mỗi char - hai thứ rất khác nhau. Bạn sẽ muốn xóa câu trả lời này. –

4

Nếu bạn muốn phân tích byte unsigned hex-chuỗi, sử dụng

byte[] b = new byte[a.length()]; 

for (int i=0; i<a.length(); i++) { 
    b[i] = (byte) Short.parseShort(a[i], 16); 
} 

"ff" sẽ được phân tích là -1, theo two's compliment.

Nếu bạn muốn "ff" để phân tích đến 255 (cao hơn một byte java có thể giữ), bạn sẽ cần phải sử dụng quần short

short[] b = new short[a.length()]; 

for (int i=0; i<a.length(); i++) { 
    b[i] = Short.parseShort(a[i], 16); 
} 
+0

Vâng, đây là những gì tôi đang nói đến. 1+ –

+0

có, nhưng cho một ngoại lệ khi chuỗi là ff Ngoại lệ trong chuỗi "chính" java.lang.NumberFormatException: Đối với chuỗi đầu vào: "ff" – user1077980

+0

@ user1077980: Lỗi là của bạn chứ không phải của Aaron. Lỗi của bạn đang cố gắng phân tích cú pháp ff. tối đa của byte là 7f. Thay vào đó, hãy thử phân tích cú pháp thành int.** Chỉnh sửa: ** hoặc sử dụng đề xuất tuyệt vời của JB Nizet! –

0

Bạn nên có một cái nhìn tại ByteArrayOutputStream.

Sau đó, bạn có thể lặp qua từng chuỗi bạn có và sử dụng phương thức Byte.parseByte(). Bạn có thể thêm nó vào ByteArrayOutputStream bằng cách sử dụng phương thức write.

Khi bạn đã chuyển đổi tất cả các chuỗi, bạn có thể sử dụng phương thức toByteArray() của ByteArrayOutputStream.

+0

ByteArrayOutputStream sẽ hoạt động, nhưng hơi quá mức ở đây. Ngoài ra Byte.parseByte() sẽ bị nghẹt thở trên "ff" –

3

Vòng qua mảng, và chuyển đổi từng String để một byte sử dụng

byte b = (byte) (Integer.parseInt(theHexaString, 16)); 

Byte.parseByte() chỉ phân tích cú pháp ký byte, và không xem xét các bit dấu như một chút dấu hiệu.

Các vấn đề liên quan