0

我知道这个问题有 N 个线程,但是有些人使用不同的方法将字节转换为 int。这是正确的我在写什么?十六进制转整数还是十六进制转十进制?哪一个是正确的?

无论如何,为什么我得到 4864 而不是 19 ?

byte[] buffer = ....
buffer[51] = 0x13;
System.out.println( buffer[51] << 8 );
4

2 回答 2

4

这是正确的我在写什么?

您发布的代码对 to 进行了隐式转换intString但这将以十进制显示。重要的是要理解一个数字既不是十六进制也不是十进制——它只是一个数字。相同的数字可以转换为不同的文本表示,这就是基础很重要的时候。同样,您可以用不同的文字表示相同的数字,因此这两个语句完全等价:

int x = 16;
int x = 0x10;

无论如何,为什么我得到 4864 而不是 19

因为您明确地将值左移 8 位:

buffer[51] << 8

这基本上是乘以 256,而 19 * 256 是 4864。

于 2013-05-07T20:04:21.403 回答
2

结果是 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));
于 2013-05-07T20:29:18.833 回答