高低位转换

文章介绍了如何通过位运算实现数据的高低位转换,提供了Java代码示例,包括byte、int和long类型的转换方法。

比如数据0x1122,也就是数字4386,其中0x11是高位,0x22是低位。

比如数据0x11223344,也就是数字287454020,其中0x1122是高位,0x3344是低位。

高低位转换就是高位数据和低位数据互换。把0x1122的高低位转换之后是0x2211,0x1223344高低位转换之后是0x33441122。

代码实现的话就是位运算,如下

    private static byte exchangeHighLowByte(byte i) {
        byte x = (byte) ((i << 4) & 0xf0); //左移4位和 11110000与运算 低位变高位
        byte y = (byte) ((i >> 4) & 0x0f);//右移4位和 00001111与运算 高位变低位
        return (byte) (x + y); //高位低位相加得到高地位互换。
    }

    private static int exchangeHighLowInt(int i) {
        int x = (i << 16) & 0xffff0000;
        int y = (i >> 16) & 0x0000ffff;
        return x + y;
    }

    private static long changeHighLowLong(long i) {
        long x = (i << 32) & 0xffffffff00000000L;
        long y = (i >> 32) & 0x00000000ffffffffL;
        return x + y;
    }

字节高低位转换在计算机领域中非常重要,由于不同 CPU 厂商的大小端模式不统一,例如 Motorola6800、PowerPC970 等是大端,x86、VAX 等是小端,这就要求不同计算机在交互过程中可能需要进行大小端转换[^2]。以下是一些常见的字节高低位转换方法及代码实现: ### Java 中将 float 转为低字节在前,高字节在后的 byte 数组 ```java public class ByteConversion { /** * 将float转为低字节在前,高字节在后的byte数组 */ public static byte[] toLH(float f) { return toLH(Float.floatToRawIntBits(f)); } public static byte[] toLH(int intVal) { byte[] b = new byte[4]; intToByte_LH(intVal, b, 0); return b; } public static void intToByte_LH(int intVal, byte[] b, int offset) { b[0 + offset] = (byte) (intVal & 0xff); b[1 + offset] = (byte) (intVal >> 8 & 0xff); b[2 + offset] = (byte) (intVal >> 16 & 0xff); b[3 + offset] = (byte) (intVal >> 24 & 0xff); } public static void main(String[] args) { float f = 3.14f; byte[] result = toLH(f); for (byte b : result) { System.out.print(b + " "); } } } ``` 上述代码通过 `toLH` 方法将 `float` 类型的数据转换为低字节在前,高字节在后的 `byte` 数组,其中 `intToByte_LH` 方法实现了将 `int` 类型的数据转换为 `byte` 数组的功能[^1][^4]。 ### Java 中 C++ 和 Java 字节高低位转换 ```java public class ByteOrderConversion { public static int convertByteOrder(byte byte1, byte byte2, byte byte3, byte byte4) { return (byte1 & 0xff) << 0 | (byte2 & 0xff) << 8 | (byte3 & 0xff) << 16 | (byte4 & 0xff) << 24; } public static void main(String[] args) { byte byte1 = 1; byte byte2 = 2; byte byte3 = 3; byte byte4 = 4; int result = convertByteOrder(byte1, byte2, byte3, byte4); System.out.println(result); } } ``` 上述代码通过 `convertByteOrder` 方法将 C++ 中的字节顺序转换Java 中的整数,使用位运算将字节重新组合成整数[^3]。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值