在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);
}