Converting 32-bit unsigned integer (big endian) to long and back

后端 未结 3 2047
北恋
北恋 2020-12-16 03:57

I have a byte[4] which contains a 32-bit unsigned integer (in big endian order) and I need to convert it to long (as int can\'t hold an unsigned number).

Also, how d

相关标签:
3条回答
  • 2020-12-16 04:25

    You can use ByteBuffer, or you can do it the old-fashioned way:

    long result = 0x00FF & byteData[0];
    result <<= 8;
    result += 0x00FF & byteData[1];
    result <<= 8;
    result += 0x00FF & byteData[2];
    result <<= 8;
    result += 0x00FF & byteData[3];
    
    0 讨论(0)
  • 2020-12-16 04:38

    Guava has useful classes for dealing with unsigned numeric values.

    http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/primitives/UnsignedInts.html#toLong(int)

    0 讨论(0)
  • 2020-12-16 04:47

    Sounds like a work for the ByteBuffer.

    Somewhat like

    public static void main(String[] args) {
        byte[] payload = toArray(-1991249);
        int number = fromArray(payload);
        System.out.println(number);
    }
    
    public static  int fromArray(byte[] payload){
        ByteBuffer buffer = ByteBuffer.wrap(payload);
        buffer.order(ByteOrder.BIG_ENDIAN);
        return buffer.getInt();
    }
    
    public static byte[] toArray(int value){
        ByteBuffer buffer = ByteBuffer.allocate(4);
        buffer.order(ByteOrder.BIG_ENDIAN);
        buffer.putInt(value);
        buffer.flip();
        return buffer.array();
    }
    
    0 讨论(0)
提交回复
热议问题