有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在Android中转换为无符号字符和无符号短字符

我必须将字节转换为无符号字符和无符号短字符,在iOS中就是这样做的

latitude = (unsigned char)(bytebuffr.getchar(0)) + ((unsigned short)(bytebuffr.getchar(1)& 0xF)) << 8);

如何在我的安卓代码中实现这一点。请帮忙 已经在安卓系统中尝试过了,但不起作用

lattitude = (short) ((getUnsignedByte((byte) (bb.getChar(0) & 0xFF))) +
                    getUnsignedByte((byte) ((bb.getChar(1) & 0x0F))) << 8);

bb是bytebuffer和bb。getchar给我字节,字节是从字节缓冲区读取的


共 (1) 个答案

  1. # 1 楼答案

    在这种情况下,不需要将char转换为short。由于bb是一个ByteBuffer,如果您想从缓冲区读取两个字节,并将它们用作有符号的16位数字,请使用^{}。如果需要从缓冲区读取两个字节(不是一个),请使用^{}并将其用作无符号16位数字。我怀疑你认为getChar只读取一个字节。它没有。char是16位宽。而且,char在Java中是an unsigned integral type。虽然它用于表示字符串中的字符(松散),但它是整数类型。积分类型包括:

    • byte:8位有符号:-128到127,包括
    • short:16位有符号-32768至32767(含)
    • char:16位无符号:0到65535,包括在内(又名'\u0000''\uffff'
    • int:32位有符号:-2147483648到2147483647,包括在内
    • long:32位有符号:-9223372036854775808到9223372036854775807,包括

    如果确实需要转换:char是一种无符号16位类型short是一种符号16位类型。要在short中使用与在char中相同的位,请执行以下操作:

    short s = (short)ch;
    

    不需要屏蔽第一个字节或类似的内容