Little Endian Unsinged trong Java

5/5 - (1 vote)

Để convert 4 bytes sang 1 số nguyên lớn trong Java ta cần làm như sau:

  1. Tạo mảng 4 bytes cho dễ quản lý
  2. cast về kiểu long
  3. 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]
  4. 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:

1 Comment

Thảo luận

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Xem thêm
Top các phần mềm được dotrinh bình chọn theo góc…
 
 
 
 
Facetime iPhone

Main Menu