首页 > 其他分享 >使用二进制表示相关业务标记

使用二进制表示相关业务标记

时间:2022-09-20 15:02:35浏览次数:61  
标签:return 进制 16 二进制 标记 挡位 业务 import String

场景:游戏充值有1-9个充值挡位,每个挡位首充都会赠送相应代金券。

 

 

 

  法一。

    1.表设计

              1.挡位表

              2.挡位与用户关联表

    2.业务逻辑

              查询关联表表示出用户哪些挡位已经充值过,其余为为充值。

  法二。

    1.表设计

              1.挡位表

              2.用户表增加first_recharge_status字段,存储10进制。

    2.业务逻辑

              在电路中1开0闭,九个挡位我们可以用二进制 1111 1111 1,表示转换成10进制为511,first_recharge_status存储511.

            

查询充值挡位,组装充值挡位参数

 

 

 

 

充值完成修改首充状态

 

 

 

 

 

 

    以下为工具类

package com.ruoyi.common.utils;

import cn.hutool.core.util.StrUtil;
import org.apache.commons.lang3.time.DateFormatUtils;

import javax.xml.bind.DatatypeConverter;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @description 进制相关工具类
 * @version V1.0
 * @author zhang
 * @date 2021/11/23 14:00
 * @update 2021/11/23 14:00
 */
public class HexUtils {

    /**
     * 将16进制转换为二进制
     *
     * @param dec
     * @return
     */
    public static String[] hexString2binaryString(Integer dec) {
        String hexString = intToHexString(dec, 2);
        //16进制转10进制
        BigInteger sint = new BigInteger(hexString, 16);
        //10进制转2进制
        String result = sint.toString(2);
        //字符串反转
        return  new StringBuffer(StrUtil.fillBefore(result, '0', 16)).reverse().toString().split("");
    }
    /**
     * 将16进制转换为二进制
     *
     * @param dec
     * @return
     */
    public static Integer binaryString2hexString(String[] dec) {
        String collect = Arrays.stream(dec).collect(Collectors.joining(""));
        return Integer.parseInt(new StringBuffer(collect).reverse().toString(),2);
    }
    /**
     * @Title:intToHexString @Description:10进制数字转成16进制
     *
     * @param a 转化数据
     * @param len 占用字节数
     * @return
     * @throws
     */
    public static String intToHexString(int a, int len) {
        len <<= 1;
        String hexString = Integer.toHexString(a);
        int b = len - hexString.length();
        if (b > 0) {
            for (int i = 0; i < b; i++) {
                hexString = "0" + hexString;
            }
        }
        return hexString;
    }

    /**
     * @Title:hexString2Bytes @Description:16进制字符串转字节数组
     *
     * @param src 16进制字符串
     * @return 字节数组
     */
    public static byte[] hexString2Bytes(String src) {
        int l = src.length() / 2;
        byte[] ret = new byte[l];
        for (int i = 0; i < l; i++) {
            ret[i] = (byte) Integer.valueOf(src.substring(i * 2, i * 2 + 2), 16).byteValue();
        }
        return ret;
    }


}

 

标签:return,进制,16,二进制,标记,挡位,业务,import,String
From: https://www.cnblogs.com/xyzxy/p/16710987.html

相关文章

  • 起床困难综合症[二进制运算]
    题面[https://www.luogu.com.cn/problem/P2114]分析题目要求是从[0,m]中选出一个数,经过给定的n次运算,得到结果ans最大位运算主要特点之一是二进制表示下不进位所以对......
  • 聊聊如何利用管道模式来进行业务编排(下篇)
    前言上篇文章我们介绍利用管道模式来进行业务编排的2种实现方式。本文又来介绍其他实现方式实现方式方式一:利用springboot自动装配1、新建管道实体@Data@AllArgsCo......
  • 设计模式在业务系统中的应用
      本文的重点在于说明工作中所使用的设计模式,为了能够更好的理解设计模式,首先简单介绍一下业务场景。使用设计模式,可以简化代码、提高扩展性、可维护性和复用性。有哪......
  • GB28181国标视频监控平台LiveGBS用户自定义播放回调鉴权,允许用户按照自己的业务逻辑控
    GB28181流媒体平台LiveGBS中有是否需要用户登录认证才可播放视频的选项控制。但是很多情况不能满足实际项目使用场景中对播放权限的控制,允许谁播不允许谁播等可能有更详细......
  • 剑指 Offer II 003. 前 n 个数字二进制中 1 的个数【模拟】
    题目给定一个非负整数n,请计算0到n之间的每个数字的二进制表示中1的个数,并输出一个数组。难度:简单说明:0<=n<=105题解按照题意模拟即可classSolutio......
  • 二进制部署k8s --containerd 之基本环境
    一,首先配置hosts文件   k8s-master-01192.168.56.101#master节点k8s-master-02192.168.56.102#master节点k8s-master-03192.168.56.106#master节点k8......
  • MySQL日志——二进制日志
    MySQL二进制日志的概念:二进制日志采用二进制格式(01)来存储日志信息(导致数据发生变化的SQL语句),二进制日志记录整个数据库的修改过程。MySQL的二进制日志主要就是起一个......
  • 字节顺序标记
    UTF-32和UTF-16的一个CodeUnit,需要转换成多个字节的序列,因此存在字节序的问题。可以在UTF-32或UTF-16编码的字节流开头,添加字节顺序标记(byte-ordermark,BOM)......
  • 剑指 Offer II 002. 二进制加法【暴力】【模拟】
    题目给定两个01字符串a和b,请计算它们的和,并以二进制字符串的形式输出。输入为非空字符串且只包含数字1和0。难度:简单提示:1<=a.length,b.length<=104......
  • 十进制浮点数转IEEE754标准的32浮点数的二进制格式
    十进制浮点数转IEEE754标准的32浮点数的二进制格式在IEEE754标准中,float所占的32位分为符号位(S)1位、阶码(E)8位、尾数(M)23位。符号位为1、0两种,1表示正数,0表示负数。阶码这......