簡體   English   中英

如何在Android中將Little Endian十六進制轉換為int / long / string?

[英]How to convert Little Endian hex to int/long/string in Android?

我有一個通過串口獲取數據的android應用程序。

例如我得到了這個字節數組:

E8 FC 3E 0E 9C EB ED 0A 71 67 28 1C 28 28 02 00 75 8C 01 00 91 6A 00 00 4A 7C 00 00

我是從設備上獲得的,在此設備的文檔中,我看到了以下內容:

所有多字節值均以Little Endian格式排序

ByteOffset:0-4及其無符號長

ByteOffset:4-8個有符號長

ByteOffset:8-12個有符號長

ByteOffset:12-16個有符號長等。

我的問題是我無法將其轉換為有效的int或long。

我嘗試了這些轉換:

int val = (bytes[3] << (Byte.SIZE * 3));
    val |= (bytes[2] & 0xFF) << (Byte.SIZE * 2);
    val |= (bytes[1] & 0xFF) << (Byte.SIZE * 1);
    val |= (bytes[0] & 0xFF);

long val = 0;
    val += new Byte(bytes[3]).intValue();
    val += new Byte(bytes[2]).intValue();
    val += new Byte(bytes[1]).intValue();
    val += new Byte(bytes[0]).intValue();

int val = java.nio.ByteBuffer.wrap(bytes).order(java.nio.ByteOrder.LITTLE_ENDIAN).getInt();

我應該如何解析我的字節數組?

更新:示例輸入字節數組:

B5 62 01 12 24 00 C0 C3 E3 01 03 00 00 00 01 00 00 00 09 00 00 00 0A 00 00 00 03 00 00 00 00 00 00 00 00 00 00 28 00 00 00 AA 00 FE 00 EC 8A

頭的前2個字節(B5 62)

秒2字節表示類和id(01 12)

在2個字節之后,有效載荷長度(24 00)

校驗和的最后2個字節(EC 8A)

在有效負載長度和校驗和字節之間,我想解析數據。

您可以在這張圖片上看到有效載荷內容: 在此處輸入圖片說明

I4和U4表示: 在此處輸入圖片說明 在此處輸入圖片說明

這是解析后的數據:

在此處輸入圖片說明

看起來像一個不錯的難題。 但是我認為我不能為您提供太多幫助。 唉。

當我輸入您的清單時,它看起來像十六進制,而不是再見;

int [] hexes = {0xB5, 0x62, 0x01, 0x12, 0x24, 0x00, 0xC0, 0xC3, 0xE3, 0x01, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xAA, 0x64, 0xFE, 0x00, 0xEC, 0x8A};

Google-fu: 將Little Endian轉換為Big Endian

資源

Edianness

Java十六進制

Java和Endian Java Integer是Big Endian。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM