2012-04-07 42 views
6

Tôi có một chuỗi chứa một chuỗi các bit (như "01100011") và một số số nguyên trong một vòng lặp while. Ví dụ:Java Byte Array conversion Số phát hành

while (true) { 
    int i = 100; 
    String str = Input Series of bits 

    // Convert i and str to byte array 
} 

Bây giờ tôi muốn có cách tốt nhất để chuyển đổi chuỗi và chuỗi thành byte. Cho đến bây giờ, những gì tôi đã làm là chuyển đổi int thành String và sau đó áp dụng phương pháp getBytes() trên cả hai chuỗi. Tuy nhiên, nó hơi chậm. Có cách nào khác để làm điều đó (có thể) nhanh hơn thế không?

+0

mối quan hệ giữa 'i' và' str' là gì? – dash1e

+0

@ dash1e, không liên quan. Tôi chỉ cho một ví dụ. i và str là khác nhau. str không phải là tôi đại diện bit. – Arpssss

+1

Vì vậy, bạn cần hai chức năng riêng biệt và nhanh chóng để chuyển đổi intengers hoặc bit chuỗi trong mảng byte? – dash1e

Trả lời

7

Bạn có thể sử dụng lớp Java ByteBuffer!

Ví dụ

byte[] bytes = ByteBuffer.allocate(4).putInt(1000).array(); 
+0

Điều này có sẵn trong các gói dựng sẵn java không? – Arpssss

+0

Cảm ơn rất nhiều. Tôi tìm thấy nó. – Arpssss

+0

@Arpssss np. buddy – Kevin

2

Chuyển đổi một int là dễ dàng (little endian):

byte[] a = new byte[4]; 
a[0] = (byte)i; 
a[1] = (byte)(i >> 8); 
a[2] = (byte)(i >> 16); 
a[3] = (byte)(i >> 24); 

Chuyển đổi chuỗi, đầu tiên chuyển đổi sang số nguyên với Integer.parseInt(s, 2), sau đó làm các việc trên. Sử dụng Long nếu bitstring của bạn có thể lên đến 64 bit và BigInteger nếu nó thậm chí còn lớn hơn thế.

1

Đối với int

public static final byte[] intToByteArray(int i) { 
    return new byte[] { 
      (byte)(i >>> 24), 
      (byte)(i >>> 16), 
      (byte)(i >>> 8), 
      (byte)i}; 
} 

Đối với chuỗi

byte[] buf = intToByteArray(Integer.parseInt(str, 2)) 
+0

Đối với phương thức chuỗi không hoạt động. – Rushil

+0

Chuỗi của bạn dài bao lâu? – dash1e

+1

Chuỗi có thể chứa tối đa 32 bit (không có số 0 đứng đầu). Và bạn cần phải đặt nó trong một mảng byte, vì vậy đó là sai – Rushil