Java字节到整数

Java字节到整数,java,int,byte,decimal,Java,Int,Byte,Decimal,我知道这个问题有N个线程,但有些人正在使用不同的方法将一个字节转换为int。我写的是正确的吗?十六进制到整数还是十六进制到十进制?哪一个是正确的 不管怎样,为什么我得到的是4864而不是19 byte[] buffer = .... buffer[51] = 0x13; System.out.println( buffer[51] << 8 ); byte[]缓冲区=。。。。 缓冲区[51]=0x13; System.out.println(缓冲区[51] 这对吗?我在写什么 您发

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

不管怎样,为什么我得到的是4864而不是19

byte[] buffer = ....
buffer[51] = 0x13;
System.out.println( buffer[51] << 8 );
byte[]缓冲区=。。。。
缓冲区[51]=0x13;
System.out.println(缓冲区[51]
这对吗?我在写什么

您发布的代码将
int
隐式转换为
String
,但这将以十进制显示。重要的是要理解数字不是十六进制或十进制的,它只是一个数字。相同的数字可以转换为不同的文本表示形式,而这正是基数的问题所在。同样,您可以用不同的文字表示相同的数字,因此这两个语句完全等效:

int x = 16;
int x = 0x10;
不管怎样,为什么我得到的是4864而不是19

因为您显式地将值左移8位:

buffer[51] << 8
buffer[51]
这对吗?我在写什么

您发布的代码将
int
隐式转换为
String
,但这将以十进制显示。重要的是要理解数字不是十六进制或十进制的,它只是一个数字。相同的数字可以转换为不同的文本表示形式,而这正是基数的问题所在。同样,您可以用不同的文字表示相同的数字,因此这两个语句完全等效:

int x = 16;
int x = 0x10;
不管怎样,为什么我得到的是4864而不是19

因为您显式地将值左移8位:

buffer[51] << 8

buffer[51]结果是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));

结果是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));