15%

KHUYẾN MẠI

Giảm giá khi nâng cấp web năm 2022

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
Evernote ứng dụng ghi chú đồng bộ smartphone - macOS…
 
 
 
 
Facetime iPhone

Main Menu