
Để convert 4 bytes sang 1 số nguyên lớn trong Java ta cần làm như sau:
- Tạo mảng 4 bytes cho dễ quản lý
- cast về kiểu long
- khi cast để tránh ra số âm cần bitmask 1 byte với 0xFF, vì trong Java loại byte lưu có dấu range từ [-128, 127]
- Cuối cùng bit shift
Cụ thể ta có hàm sau:
/**
* get a number that greater 2 billions (2,147,483,647)
*
* @param a
* @return
*/
public static long ToLittleEndianUint32Java(byte[] a) {
int idx = 0;
long ret = 0;
ret |= (a[idx++] & 0xFF);
ret |= (long) (a[idx++] & 0xFF) << 8;
ret |= (long) (a[idx++] & 0xFF) << 16;
ret |= (long) (a[idx++] & 0xFF) << 24;
return ret;
}
Ví dụ:
int offset = 10; ToLittleEndianUint32Java(Arrays.copyOfRange(block, offset, offset + 4));
Ví dụ này cho phép ta convert 4 byte thành 1 số nguyên dương lớn hơn 2 tỷ, 4 tỷ (vì ta dùng long)
Nếu cast về int và trả về int thì có thể bạn sẽ nhận được số âm vì trong Java kiểu int chỉ lưu được các số từ: âm 2 tỷ đến 2 tỷ [-2147483648, 2147483647]
Tham khảo thêm cách dùng: Copy mảng byte trong Java bằng Arrays.copyOfRange()
Các bài viết không xem thì tiếc:
- Siêu tổng hợp iOS code snippets – Objective C
- Lưu ý khi porting C/C++ sang Java
- Làm việc với font trong Android
- Copy mảng byte trong Java bằng Arrays.copyOfRange()
- Hiểu về cách tổ chức file, bộ nhớ của app Android
- Gửi dữ liệu đến BLESerial3 bằng Bluetooth LE Android
- Lập trình với Recyclerview trong Android – Bài 2 | dotrinh.com
- Cách dùng AsyncTask trong Android
- Chuyển một đối tượng sang Json trong Android
- Lập trình với Recyclerview trong Android – Bài 3 | dotrinh.com
- Lập trình với Recyclerview trong Android – Bài 1 | dotrinh.com
- Thuật toán tìm kiếm nhị phân (Binary Search)
- Cách dùng Eventbus để truyền dữ liệu trong Android
- Đọc file và ghi file vào bộ nhớ internal Android từ thư mục raw
- Thuật toán tìm kiếm tuyến tính (Linear Search)


1 Comment