• java位操作


    在搞与c的协议解析的时候,要进行很多的位运算。因为位运算,实际编程中用的不多,这里还是记录一下。

    c协议过来的数据是16进制的字符串。

    首先是将16进制的字符串转换为ByteBuffer.

        public static ByteBuffer string2Buffer(String source) {
            ByteBuffer buffer = ByteBuffer.allocate(source.length() / 2);
            for (int idx = 0; idx < buffer.capacity(); idx++) {
                int byteValue = Integer.parseInt(source.substring(idx * 2, idx * 2 + 2), 16);
                buffer.put((byte) byteValue);
            }
            buffer.position(0);
            return buffer;
        }

    然后从ByteBuffer中取byte数据。

    int flag=0; 
    ByteBuffer buffer=NocHelper.string2Buffer(source);
            while (buffer.position() < buffer.limit()){
                flag=buffer.get() & 0x0FF;
            }

    这样算是绕了一圈,将16进制的字符转为了无符号10进制的数字。

    因为每个字节中的每一位都代表着不同的信息。其中取一个字节中的高4位和低4位的时候。用到了右移和一个&运算。

    右移动4位,就可以获取到高4位的数值。

    与0x0f的&运算,相当于与 00001111进行&运算,0x0f相当于一个掩码,把高四位的都置为0,只保留低四位。

    对字节中的某一位的状态进行判断时候,之前的做法也是采用掩码。如对xxxxx1xx这种格式数据,验证foo的低三位是否为1。对判断的数值进行操作时候,则 foo & Integer.parseInt("00000100",2)的结果进行判断,等于 00000100(4)则满足。

    目前用到暂时这些,免得以后再给忘了。

  • 相关阅读:
    记swoole数据库连接池消失问题的解决方式
    表格逻辑的几个想法
    Java代码实现热部署
    一个接口代理demo
    thinkphp5 关于跨域的一些坑
    CoSky-Mirror 就像一个镜子放在 Nacos、CoSky 中间,构建一个统一的服务发现平台
    CoSky 高性能 服务注册/发现 & 配置中心
    Govern Service 基于 Redis 的服务治理平台
    Govern EventBus
    mysql中查看视图代码
  • 原文地址:https://www.cnblogs.com/juepei/p/4290531.html
Copyright © 2020-2023  润新知