欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java進(jìn)制轉(zhuǎn)換工具類實(shí)現(xiàn)減少參數(shù)長(zhǎng)度

 更新時(shí)間:2023年02月22日 14:13:36   作者:iiopsd  
這篇文章主要為大家介紹了java進(jìn)制轉(zhuǎn)換工具類實(shí)現(xiàn)減少參數(shù)長(zhǎng)度示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

背景

最近有個(gè)發(fā)送短信的功能,需要在短信中帶有詳情鏈接,鏈接中帶有對(duì)應(yīng)信息且要有校驗(yàn)功能,然而短信是按字?jǐn)?shù)收費(fèi)的,所以鏈接要盡可能的短。鏈接中帶有數(shù)字類型參數(shù),就想到通過(guò)低進(jìn)制轉(zhuǎn)高進(jìn)制可以減少參數(shù)長(zhǎng)度。

原理

低進(jìn)制轉(zhuǎn)換到高進(jìn)制的時(shí)候可能會(huì)減少位數(shù),例如二進(jìn)制是滿二進(jìn)一,十進(jìn)制是滿十進(jìn)一。

二進(jìn)制:101001101
轉(zhuǎn)換為對(duì)應(yīng)的四進(jìn)制為:11031
轉(zhuǎn)換為對(duì)應(yīng)的八進(jìn)制為:515
轉(zhuǎn)換為對(duì)應(yīng)的十進(jìn)制為:333
轉(zhuǎn)換為對(duì)應(yīng)的十六進(jìn)制為:14d
轉(zhuǎn)換為對(duì)應(yīng)的三十二進(jìn)制為:ad

我們平常用的都是十進(jìn)制的數(shù)值,就以十進(jìn)制來(lái)講解下轉(zhuǎn)換方法。

十進(jìn)制A轉(zhuǎn)換為N進(jìn)制R

1、A除以N,商數(shù)為S1,余數(shù)為Y1;
2、將S1除以N,商數(shù)為S2,余數(shù)為Y2;
3、將S2除以N,商數(shù)為S3,余數(shù)為Y3;
4、循環(huán)n次直到商數(shù)為0,余數(shù)為Yn(Yn < N,n為下標(biāo),代表循環(huán)次數(shù));
5、將余數(shù)Yn作為下標(biāo)取到對(duì)應(yīng)的N進(jìn)制的值Rn;
6、Rn,Rn-1,...,R2,R1拼接起來(lái)就得到N進(jìn)制數(shù)R

用以上方法,如果是轉(zhuǎn)換為十六進(jìn)制,我們帶入看下結(jié)果
十六進(jìn)制值為0123456789ABCDEFA = 812, N = 16

1、812除以16,商數(shù)為50,余數(shù)為12(對(duì)應(yīng)十六進(jìn)制數(shù):C);
2、將50除以16,商數(shù)為3,余數(shù)為2(對(duì)應(yīng)十六進(jìn)制數(shù):2);
3、將3除以16,商數(shù)為0,余數(shù)為3(對(duì)應(yīng)十六進(jìn)制數(shù):3);
4、所以R = 32C

N進(jìn)制R轉(zhuǎn)換為十進(jìn)制A

假設(shè)R有三位數(shù) R2R1R0,從右到左開(kāi)始處理數(shù)據(jù)

S0=R0∗N0S_0 = R_0*N^0S0=R0∗N0
S1=R1∗N1S_1 = R_1*N^1S1=R1∗N1
S2=R2∗N2S_2 = R_2*N^2S2=R2∗N2
A=S0+S1+S2A =S_0 + S_1 + S_2A=S0+S1+S2

帶入實(shí)際數(shù)字實(shí)踐一下十六進(jìn)制8F1轉(zhuǎn)換過(guò)程

S0=1∗160S_0 = 1*16^0S0=1∗160 = 1 * 1 = 1
S1=F∗161S_1 = F*16^1S1=F∗161 = F + 16 = 15 * 16 = 240
S2=8∗162S_2 = 8*16^2S2=8∗162 = 8 * 256 = 2048
A=1+240+2048=2289A =1 + 240 + 2048 = 2289A=1+240+2048=2289

應(yīng)用

前面以十進(jìn)制和十六進(jìn)制轉(zhuǎn)換舉例是為了更好幫助大家理解轉(zhuǎn)換的方式,在應(yīng)用的過(guò)程中我們會(huì)發(fā)現(xiàn)十進(jìn)制轉(zhuǎn)十六進(jìn)制并不能減少很多數(shù)字的位數(shù),那么我們就可以使用三十二進(jìn)制,甚至是六十二進(jìn)制。

六十二進(jìn)制轉(zhuǎn)換工具類實(shí)現(xiàn):

/**
* 支持 import Java 標(biāo)準(zhǔn)庫(kù) (JDK 1.8)
*/
import java.util.*;
/**
* 六十二進(jìn)制轉(zhuǎn)換工具類
*/
public class Main {
  // 將字符集打亂就會(huì)帶有一點(diǎn)加密效果
  private static final String chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
   private static final int scale = 62;
   public static void main(String []args) {
        Long source1 = 121231313213123L;
        String source2 = "IAvzjI19";
        System.out.println(source1 + " encode -> " + encode(source1, chars));
        System.out.println(source2 + " decode -> " + decode(source2, chars));
   }
   /**
     * 將數(shù)字轉(zhuǎn)為62進(jìn)制
     *
     * @param num Long 型數(shù)字
     * @return 62進(jìn)制字符串
     */
    public static String encode(long num, String chars) {
        StringBuilder sb = new StringBuilder();
        int remainder;
        while (num > scale - 1) {
            remainder = Long.valueOf(num % scale).intValue();
            sb.append(chars.charAt(remainder));
            num = num / scale;
        }
        sb.append(chars.charAt(Long.valueOf(num).intValue()));
        return sb.reverse().toString();
    }
    /**
     * 62進(jìn)制字符串轉(zhuǎn)為數(shù)字
     *
     * @param str 編碼后的62進(jìn)制字符串
     * @return 解碼后的 10 進(jìn)制字符串
     */
    public static long decode(String str, String chars) {
        long num = 0;
        int index;
        for (int i = 0; i < str.length(); i++) {
            index = chars.indexOf(str.charAt(i));
            num += (long) (index * (Math.pow(scale, str.length() - i - 1)));
        }
        return num;
    }
}

延伸

在進(jìn)制轉(zhuǎn)換的過(guò)程中,我們可以看到對(duì)應(yīng)的進(jìn)制有字符集,例如:十六進(jìn)制字符集為0123456789ABCDEF,在轉(zhuǎn)換后得到的值假設(shè)為12,對(duì)應(yīng)的就是字符集的下標(biāo)位置(下標(biāo)從0開(kāi)始算)為12的值C。那么低進(jìn)制轉(zhuǎn)高進(jìn)制除了縮減位數(shù)外,我們還可以打亂字符集,獲取到的值別人就不容易輕易的猜到實(shí)際值,有一點(diǎn)加密的效果。將十六進(jìn)制字符集打亂為37AF126BCDE95480,那么12對(duì)應(yīng)的值就是5,按常規(guī)字符集推算原本的值就會(huì)得到錯(cuò)誤值。

還有其他問(wèn)題要注意,字符集確定后編碼了一些數(shù)據(jù)后,如果在修改字符集就會(huì)導(dǎo)致已有數(shù)據(jù)再解碼的時(shí)候出錯(cuò),無(wú)法解碼得到正確的數(shù)據(jù),所以不要輕易修改字符集。

修改了字符集要做舊數(shù)據(jù)處理,或者編碼的時(shí)候加上字符集版本號(hào),然后在解碼的時(shí)候根據(jù)版本號(hào)對(duì)應(yīng)的字符集解碼。

以上就是java進(jìn)制轉(zhuǎn)換工具類實(shí)現(xiàn)減少參數(shù)長(zhǎng)度的詳細(xì)內(nèi)容,更多關(guān)于java進(jìn)制轉(zhuǎn)換減少參數(shù)長(zhǎng)度的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring Hibernate實(shí)現(xiàn)分頁(yè)功能

    Spring Hibernate實(shí)現(xiàn)分頁(yè)功能

    這篇文章主要為大家詳細(xì)介紹了Spring Hibernate實(shí)現(xiàn)分頁(yè)功能的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • SpringBoot整合chatGPT的項(xiàng)目實(shí)踐

    SpringBoot整合chatGPT的項(xiàng)目實(shí)踐

    本文主要介紹了SpringBoot整合chatGPT的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 詳解Java中Vector和ArrayList的區(qū)別

    詳解Java中Vector和ArrayList的區(qū)別

    這篇文章主要為大家詳細(xì)介紹了Java中Vector和ArrayList的區(qū)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • java  HashMap擴(kuò)容詳解及實(shí)例代碼

    java HashMap擴(kuò)容詳解及實(shí)例代碼

    這篇文章主要介紹了java HashMap擴(kuò)容詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Maven項(xiàng)目在new module后,pom文件顯示為Ignored pom.xml問(wèn)題

    Maven項(xiàng)目在new module后,pom文件顯示為Ignored pom.xml問(wèn)題

    在Maven項(xiàng)目中,若創(chuàng)建過(guò)同名module后刪除,再次創(chuàng)建時(shí)可能導(dǎo)致pom.xml文件被IDEA忽略,原因是IDEA保留了之前module的痕跡,導(dǎo)致重建時(shí)將其視為已刪除的module,解決方法是進(jìn)入IDEA設(shè)置,找到Maven的Ignored Files設(shè)置
    2024-09-09
  • Jmeter入門教程

    Jmeter入門教程

    jmeter是一款優(yōu)秀的開(kāi)源性能測(cè)試工具,目前最新版本3.0版本,本文給大家介紹Jmeter入門教程,文中通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-11-11
  • Spring事務(wù)事件監(jiān)控的實(shí)現(xiàn)

    Spring事務(wù)事件監(jiān)控的實(shí)現(xiàn)

    這篇文章主要介紹了Spring事務(wù)事件監(jiān)控的實(shí)現(xiàn)。本文首先會(huì)使用實(shí)例進(jìn)行講解Spring事務(wù)事件是如何使用的,然后會(huì)講解這種使用方式的實(shí)現(xiàn)原理。感興趣的小伙伴們可以參考一下
    2018-10-10
  • 解決springboot+shiro 權(quán)限攔截失效的問(wèn)題

    解決springboot+shiro 權(quán)限攔截失效的問(wèn)題

    這篇文章主要介紹了解決springboot+shiro 權(quán)限攔截失效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • 使用Java快速將Web中表格轉(zhuǎn)換成Excel的方法

    使用Java快速將Web中表格轉(zhuǎn)換成Excel的方法

    在平時(shí)做系統(tǒng)項(xiàng)目時(shí),經(jīng)常會(huì)需要做導(dǎo)出功能,下面這篇文章主要給大家介紹了關(guān)于使用Java快速將Web中表格轉(zhuǎn)換成Excel的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • 解析探秘fescar分布式事務(wù)實(shí)現(xiàn)原理

    解析探秘fescar分布式事務(wù)實(shí)現(xiàn)原理

    這篇文章主要為大家解析探秘fescar分布式事務(wù)的實(shí)現(xiàn)原理,fescar的txc模型實(shí)現(xiàn)非常有研究的價(jià)值,所以今天我們來(lái)好好翻一翻fescar項(xiàng)目的代碼
    2022-02-02

最新評(píng)論