Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在两个字节内转换大于256的十六进制值_Java_Arrays_Type Conversion_Hex_Byte - Fatal编程技术网

Java 如何在两个字节内转换大于256的十六进制值

Java 如何在两个字节内转换大于256的十六进制值,java,arrays,type-conversion,hex,byte,Java,Arrays,Type Conversion,Hex,Byte,我试图将大于255(无符号)的十六进制值存储到两个字节中。下面是示例代码: public class Test { public static void main(String[] args) { byte b = (byte)0x12c; // output : 44 System.out.println(b); } } 示例:当我将300转换为十六进制时,它将是12c,应该在字节中被刮为(44,1)。为什么java在第一个字节中保存了44 b

我试图将大于255(无符号)的十六进制值存储到两个字节中。下面是示例代码:

public class Test {
    public static void main(String[] args) {
        byte b = (byte)0x12c; // output : 44
        System.out.println(b);
    }
}
示例:当我将300转换为十六进制时,它将是12c,应该在字节中被刮为(44,1)。为什么java在第一个字节中保存了44

byte[] bytes = new byte[2];
ByteBuffer bbuf = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN):
bbuf.putShort((short) 0x12c);

byte[] bytes = new byte[4];
ByteBuffer bbuf = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN):
bbuf.putInt(0x12c);

System.out.println(Arrays.toString(bytes));
或者你自己计算


在这里,我们创建所需的两个字节,在其周围包装一个ByteBuffer,这样我们就可以读取和写入几个数字基元类型。您需要小的尾端字节顺序(首先是2c)。

您需要将值存储到更大的数据类型(long或int)中,然后只获取前16个不重要的位

int raw = (int)0x12c;
int masked = raw & 0x00ff
System.out.println(masked);

您希望它放在哪里,为什么?
0x12c
0001\u 0010\u 1100
。转换为
字节
只保留
int
的最低有效
8位
,在您的示例中为
0010_1100
,等于
44
。将
向下转换为
int
时也是如此。如果您不熟悉,可能会遇到许多转换问题。阅读Java语言规范中关于它们的所有内容。感谢@Jacob的回复。但如果是400(而不是300 0x12c),它会打印-112,但它应该打印144和1作为0001_1001_0000。