我知道这个问题有 N 个线程,但是有些人使用不同的方法将字节转换为 int。这是正确的我在写什么?十六进制转整数还是十六进制转十进制?哪一个是正确的?
无论如何,为什么我得到 4864 而不是 19 ?
byte[] buffer = ....
buffer[51] = 0x13;
System.out.println( buffer[51] << 8 );
这是正确的我在写什么?
您发布的代码对 to 进行了隐式转换int
,String
但这将以十进制显示。重要的是要理解一个数字既不是十六进制也不是十进制——它只是一个数字。相同的数字可以转换为不同的文本表示,这就是基础很重要的时候。同样,您可以用不同的文字表示相同的数字,因此这两个语句完全等价:
int x = 16;
int x = 0x10;
无论如何,为什么我得到 4864 而不是 19
因为您明确地将值左移 8 位:
buffer[51] << 8
这基本上是乘以 256,而 19 * 256 是 4864。
结果是 4864,因为 4864 是十六进制的 0x1300。如果您期望结果为 19(0x13),那么我猜您正在尝试进行循环移位。
你可以用这样的写作来做到这一点,
/*hex 0x13 (19 in decimal) is assigned to buffer[51] as int*/
buffer[51] = 0x13;
System.out.println( Integer.rotateRight(buffer[51], 8));