如何在Java中进行大端到小端字节交换
我的数据在java中存储为int,表示始终为正的无符号16位值 大端十进制253存储为16位无符号十六进制字符0x00FD,串行传输到如何在Java中进行大端到小端字节交换,java,Java,我的数据在java中存储为int,表示始终为正的无符号16位值 大端十进制253存储为16位无符号十六进制字符0x00FD,串行传输到 运行Android的Little Endian ARM显示为64768十进制,即十六进制0xFD00 所以我需要交换字节 问题是应用程序是在JAVA中,主要使用签名数据类型 定义为有符号8位的java字节 定义为有符号32位的java整数 1 private void UI_Update_RunVars() {byte msb_byte1, lsb_byte
运行Android的Little Endian ARM显示为64768十进制,即十六进制0xFD00 所以我需要交换字节 问题是应用程序是在JAVA中,主要使用签名数据类型 定义为有符号8位的java字节 定义为有符号32位的java整数
1 private void UI_Update_RunVars() {byte msb_byte1, lsb_byte2; int Swappedbytes;
2 String ONText;
3 msb_byte1 = (byte) mONTimeCount;
4 lsb_byte2 = (byte) (mONTimeCount>>8);
5 Swappedbytes = ((msb_byte1<<8) + lsb_byte2);
6 ONText = Convert2Time(Swappedbytes);
7 mTextON_Count.setText(ONText);
8 }
1 private void UI\u Update\u RunVars(){byte msb\u byte1,lsb\u byte2;int Swappedbytes;
2字符串上下文;
3 msb_字节1=(字节)mONTimeCount;
4 lsb_字节2=(字节)(mONTimeCount>>8);
5 Swappedbytes=((msb_字节1使用字节实际上会使其更加复杂。您可以使用整数执行所有操作。让v
作为要转换的值:
int swapped = ((v >> 8) & 0xff) | ((v & 0xff) << 8);
int swapped=((v>>8)&0xff)|((v&0xff)使用字节实际上会使其更加复杂。您可以使用整数执行所有操作。让v
作为要转换的值:
int swapped = ((v >> 8) & 0xff) | ((v & 0xff) << 8);
int swapped=((v>>8)&0xff)|((v&0xff)首先我认为Integer.reverseBytes
应该可以解决这个问题,但共享代码的实际问题是,我们将整数减少到字节,这将使其为负。相反,我们可以只保留整数计算
字节级信息的提取可以通过位级操作完成
这应该起作用:
int mONTimeCount = 0x00FD;
int msb_byte1, lsb_byte2; int Swappedbytes;
String ONText;
msb_byte1 = mONTimeCount & 0x000000FF;
lsb_byte2 = (mONTimeCount >> 8) & 0x000000FF;
Swappedbytes = ((msb_byte1<<8) | lsb_byte2);
int-mONTimeCount=0x00FD;
int msb_字节1,lsb_字节2;int Swappedbytes;
字符串上下文;
msb_字节1=mONTimeCount&0x000000FF;
lsb_字节2=(mONTimeCount>>8)&0x000000FF;
Swappedbytes=((msb_byte1首先,我认为Integer.reverseebytes
应该可以解决这个问题,但共享代码的实际问题是,我们将整数减少为字节,这将使其无论如何都为负。相反,我们可以只保留整数中的计算
字节级信息的提取可以通过位级操作完成
这应该起作用:
int mONTimeCount = 0x00FD;
int msb_byte1, lsb_byte2; int Swappedbytes;
String ONText;
msb_byte1 = mONTimeCount & 0x000000FF;
lsb_byte2 = (mONTimeCount >> 8) & 0x000000FF;
Swappedbytes = ((msb_byte1<<8) | lsb_byte2);
int-mONTimeCount=0x00FD;
int msb_字节1,lsb_字节2;int Swappedbytes;
字符串上下文;
msb_字节1=mONTimeCount&0x000000FF;
lsb_字节2=(mONTimeCount>>8)&0x000000FF;
交换字节=((msb_Byte1相关:特别是,我认为您应该能够使用一些Integer.reverseBytes
,但到目前为止,我已经使用了。可能我的16位算术已经生锈。Integer.reverseBytes
工作正常。您共享的代码可能会有点混乱,因为int
是32位,而不是16位:您正在反转FD00。)
是0000FD00
的简写,而你得到的FD0000
是00FD0000
的简写。相关:特别是,我认为你应该能够使用整数.reverseBytes
,但到目前为止我已经有了。也许我的16位算法已经生锈了。Integer.reverseBytes
工作正常。T您共享的代码可能会有点混淆,因为int
是32位,而不是16位:您正在反转FD00
,这是0000FD00
的缩写,您会得到FD0000
,这是00FD0000
的缩写。是的,我意识到这只是16位数字,并删除了我的注释。回答很好。简洁。最后我意识到我得到的答案和你的一样。是的,我意识到这只是16位的数字,并删除了我的评论。答案很好,很简洁。最后我意识到我得到的答案和你的一样。