Tôi đang đọc 8 byte dữ liệu từ thiết bị phần cứng. Tôi cần phải chuyển đổi chúng thành một giá trị số. Tôi nghĩ rằng tôi muốn chuyển đổi chúng đến một thời gian dài như vậy nên phù hợp với 8 byte. Tôi không quen thuộc với Java và các hoạt động loại dữ liệu cấp thấp. Tôi dường như có hai vấn đề (ngoài thực tế là hầu như không có tài liệu cho phần cứng trong câu hỏi), Các byte được mong đợi để được unsigned, vì vậy tôi không thể làm một chuyển đổi số nguyên thẳng. Tôi không chắc họ là những gì.Làm thế nào để chuyển đổi một byte thành một đoạn dài trong Java?
Mọi lời khuyên sẽ được đánh giá cao.
Đã kết thúc với điều này (lấy từ một số mã nguồn tôi có lẽ đã đọc một tuần trước đây):
public static final long toLong (byte[] byteArray, int offset, int len)
{
long val = 0;
len = Math.min(len, 8);
for (int i = (len - 1); i >= 0; i--)
{
val <<= 8;
val |= (byteArray [offset + i] & 0x00FF);
}
return val;
}
Tại sao bạn cần phải chuyển đổi 8 byte đó thành một giá trị số duy nhất? Nếu chúng thực sự là các byte thành phần có giá trị lớn hơn, thì chúng không phải là "đã ký" hoặc "chưa ký". Nếu bạn không biết tính cuối cùng của họ là gì, thì bạn chỉ đơn giản là không thể diễn giải chúng như một số giá trị lâu dài. –
Tôi biết chúng là những giá trị liên tiếp (một bộ đếm từ) nên qua thử và sai tôi có thể tìm thấy khi nó báo cáo sự gia tăng chính xác. Tôi cần phải chuyển đổi chúng thành một giá trị số duy nhất để xác định tỷ lệ thay đổi của nó. – Jotham
Bạn nên thay thế 0x00FF bằng 0xFFL vì điều đó sẽ thể hiện ý định chuyển đổi byte của bạn thành dài hơn. – starblue