Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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中通过移位将有符号字节数组内容转换为十进制_Java_Byte_Bit Shift - Fatal编程技术网

在java中通过移位将有符号字节数组内容转换为十进制

在java中通过移位将有符号字节数组内容转换为十进制,java,byte,bit-shift,Java,Byte,Bit Shift,我有一个十六进制十进制值的字节数组,我使用以下代码将该数组转换为十进制值 byte[] content = message.getFieldValue( "_Decoder Message" ).data(); int[] decContent = new int[ content.length ]; int i = 0; for ( byte b : content ) decContent[ i++ ] = b & 0xff; 现在数组看起来像 decContent=[01

我有一个十六进制十进制值的字节数组,我使用以下代码将该数组转换为十进制值

byte[] content = message.getFieldValue( "_Decoder Message" ).data();
int[] decContent = new int[ content.length ];
int i = 0;
for ( byte b : content )
   decContent[ i++ ] = b & 0xff;
现在数组看起来像 decContent=[01 00 05 00]

此数组的前2个索引被转换并保存为int值,如下所示

 int traceIdlow = decContent[ 0 ] & 0xFF;
 int traceIdhigh = decContent[ 1 ] & 0xFF;
 int TraceId = traceIdlow | ( traceIdhigh << 8 );
有什么想法吗


谢谢

您是在询问如何更改4字节的顺序吗 发件人:b0 b1 b2 b3 int变量中的to:b3b2b1b0

  byte[] b = {0x5, 0x44, (byte)0x7f, 0x1};      // convert to 017f4405
  int val = b[3]<<24 |  b[2]<<16 | b[1]<<8 | b[0];
  System.out.println("val="+Integer.toHexString(val)); // val=17f4405
byte[]b={0x5,0x44,(byte)0x7f,0x1};//转换为017f4405
int val=b[3]类似这样的内容:

int val = decContent[ 2 ] | (decContent[ 3 ] << 8)
  | (decContent[ 4 ] << 16) | (decContent[ 5 ] << 24);

打印答案5。

并将其转换为无符号DEC。当字节扩展为int时,需要添加0xFF,并将0xFF转换为带符号。@UmairIqbal-请参阅我上面的说明。您可以将数据表示为十进制,但除非您创建一个字符表示形式,否则您不能将其转换为十进制。我预期为5,但它给出了一个巨大的数字或(但很重要)点:您不能转换为“十进制”,而是将数值从字节大小转换为整数大小。然后你要把一些位压缩形式的值分解成单个整数。“十进制”永远不会进入它。
int val = decContent[ 2 ] | (decContent[ 3 ] << 8)
  | (decContent[ 4 ] << 16) | (decContent[ 5 ] << 24);
public static void main(String[] args) throws IOException {
    int[] decContent = new int[] {1,0,5,0,0,0};
    int val = decContent[ 2 ] | (decContent[ 3 ] << 8)
              | (decContent[ 4 ] << 16) | (decContent[ 5 ] << 24);
    System.out.println(val);
}