gpt4 book ai didi

java - 如何在Java中进行大端到小端字节交换

转载 作者:行者123 更新时间:2023-12-01 07:47:39 26 4
gpt4 key购买 nike

我的数据在java中存储为int。 <32bitsigned>,表示一个无符号的16bit值,总是正数。

大端十进制 253 存储为 16 位无符号十六进制字符 0x00FD 串行传输到
运行 Android 的 Little Endian ARM 显示为 64768 十进制,即十六进制 0xFD00所以我需要交换字节。

问题是应用程序是在 JAVA 中,主要使用签名数据类型

java字节定义为有符号8位java 整数定义为有符号 32 位

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 }

所以我上面的例子,我发送 0x00FD 为十进制 253 大端,它在小端上作为 0xFD00 到达我调用方法 UI_Update_RunVars();其中 mONTimeCount = 0xFD00 我需要交换字节以在屏幕 253 上显示十进制数“4 分钟,13 秒”在调试器中:

第 3 行执行为 msb_byte1 = 0x00;第 4 行执行为 lsb_byte2 = 0xFD;第5行是发生错误的地方第 5 行在调试器中显示为 -3,这是正确的数学,但不是正确的答案有符号 32 位整数的第 5 -3 行显示为十六进制 0xFFFF_FFFD,我想要 0x00FD

当数据类型有符号时,如何进行无符号数学和字符串运算。

我的应用程序很简单,采用无符号 16 位数字并将其转换为小时分秒形式的时间

因此,只要未设置 MSB,上述代码实际上适用于任何十六进制数字,

例如,任何 0x7F 或更低的数字都可以工作,但任何 0x80 或更大的数字都会失败,因为 MSB 是符号位。

最佳答案

使用字节实际上会使事情变得更加复杂。您可以使用整数进行所有操作。让 v 为要转换的值:

int swapped = ((v >> 8) & 0xff) | ((v & 0xff) << 8);

关于java - 如何在Java中进行大端到小端字节交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48428315/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com