1. 程式人生 > >字串生成偽唯一十六進位制整數

字串生成偽唯一十六進位制整數

最近對接了讓人頭疼的廣告EXCHANGE,需要為每個廣告設定一個全域性唯一的十六進位制ID。初步設計是講2個UDID(BIGINT20)拼接起來,但這樣遇到2個問題:

  1. 唯一性:2個UDID都是資料庫自增主鍵,型別為BIGINT20,拼接會導致非唯一性

  2. 溢位:對方使用long型別接受ID,會導致溢位

因此,要對拼接後的字串做特殊處理,處理的大致方向是保證唯一性以及縮短字串長度,大致方法是先做MD5,然後對拼接字串做雜湊:

public static long generateUUID(String id){

        //MD5 id
        MessageDigest md5 = null
; try { md5 = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } //AdContentId + schemaId 做MD5 byte[] bytes = md5.digest(id.toString().getBytes()); StringBuffer sb = new StringBuffer(); for
(byte b : bytes){ //縮短字串長度:對每一位取後4位,做16進位制處理 int val = (int)b & 0xf; sb.append(Integer.toHexString(val)); } //Hash String to Long return SDBMHash(sb.toString().toCharArray()); } private static long SDBMHash(char[] str) { long
hash = 0L; for(char c : str) hash = (c) + (hash << 6) + (hash << 16) - hash; return (hash & Long.MAX_VALUE); }

相關推薦

字串生成唯一整數

最近對接了讓人頭疼的廣告EXCHANGE,需要為每個廣告設定一個全域性唯一的十六進位制ID。初步設計是講2個UDID(BIGINT20)拼接起來,但這樣遇到2個問題: 唯一性:2個UDID都是資料庫自增主鍵,型別為BIGINT20,拼接會導致非唯一性 溢位:

二進位制字串,十進位制,字串,ASC/GBK字串間的相互轉換函式

 最近在做一些**演算法的處理,由於借鑑了許多已存在模組,處理時使用了許多字串和進位制轉換函式,過程中從下面幾個函式中得到許多幫助。 論壇參考連結: https://bbs.csdn.net/topics/390991981 十進位制整數轉二進位制串 十進位制整數

十進位制數(字串)轉換為

緣由:程式中需要輸入十六進位制數再儲存資料傳送到下位機中。但我們在上位機中輸入的其實是一串字元。我上一位同事直接用的是強轉,數值不超過10還好,基本就是下位機配合上位機,但我又覺得這樣的做法不好,寫了一段函式用來將“字串”儲存為十六進位制數。在這裡就記錄一下,為我剛開始的事

求教:char型字串轉換為整數問題

我有一個字串:char a[9]="1234567a"; 需要通過c++庫函式(自己會寫,但是程式碼量大)把它轉換為long或者int型,儲存在一個變數中。 =============================== char a[9]="1234567a"; long 

QT QString 整數變為字串自動補0 && 十進位制補零

QString str = QString("%1").arg(outChar&0xFF,2,16,QLatin1Char('0'));int a=0001;QString str = QString("%1").arg(a,4,10,QLatin1Char('0')

c++ j將十進位制整數轉化為整數 用棧來實現

這是將十進位制整數轉化為十六進位制整數 並且是用棧來實現的轉化過程// 例1.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include<iost

Java生成的MD5加密字串

package com.zzj; import java.math.BigInteger; import java.security.MessageDigest; public class MD

QT十進位制字串轉換

QByteArray在串列埠通訊中經常被使用,有一定必要較為全面詳細的對QByteArray進行闡述。本文通過以下幾個部分加以介紹: 1. 初始化 2. 訪問與賦值 3. 新增、刪除、插入與替換操作 4. 查詢與比較 5. 資料轉換與處理 1 初始化 2 訪問與賦值

iOS 字串 "#FFFF00" 轉換成顏色物件

1 + (UIColor *)colorWithHexStr:(NSString *)hexString { 2 NSString *colorString = [[hexString stringByReplacingOccurrencesOfString:@"#" withString:

C--整形和字串的相互轉換

前言 十六進位制整形:6B746d656d6f7869616667650007e26B 十進位制字串:“ktiemoxiaoge ‘\07’ '\226’k" 十六進位制字串“6B746d656d6f7869616667650007e26B” 有什麼用呢??在網路通訊中,常常要制定一定的

nodejs字串與btye型資料相互轉換

byte型轉換十六進位制字串 /** * byte型轉換十六進位制 * @param b * @returns {string} * @constructor */ const Bytes2HexString = (b)=> { let hexs = ""; fo

位元組陣列轉化為字串時 &0xff

我是資源的搬運工~~~ 關於這個位元組陣列轉化為十六進位制字串時 &0xff,看到很多次了,這裡整理一下網上的資料,記錄一下: byte 為什麼要&0xff byte 為什麼要 &0xff /** * 位元組陣列轉換成字串HEX表示 *

整數字串(十進位制/

程式碼來自:陳碩muduo庫 #include <stdio.h> #include <algorithm> #include <stdint.h> const char digits[] = "9876543210123456789";

位元組陣列轉化為字串時 &0xff

我是資源的搬運工~~~ 關於這個位元組陣列轉化為十六進位制字串時 &0xff,看到很多次了,這裡整理一下網上的資料,記錄一下: /** * 位元組陣列轉換成字串HEX表示 * * @param data 位元組陣列

遇到問題---redis命令列檢視中文亂碼--字串處理

症狀 Redis在使用命令列操作時,如果檢視內容或者key中包含中文,會顯示16進位制的字串”\xe4\xb8\xad\xe5\x9b\xbd” 127.0.0.1:6379> set k1 '中國' OK 127.0.0.1:6379> get

C++中字串拼接、轉十進位制

txt檔案如下: 檔案說明:檔案中為十六進位制資料。 實現:先進行字串拼接,然後進行十六進位制轉十進位制。 字串拼接程式碼: //字串拼接 infile>>string1>>string2; string1=string1+string2

學校OJ題——字串

問題 D: 十六進位制加 時間限制: 1 Sec 記憶體限制: 128 MB 提交: 486 解決: 231 [提交][狀態][討論版] 題目描述 在十六進位制表示中,ABCDEF用於表示十進位制的10、11、12、13、14、15 現輸入兩個表示十六進位制整數的字串,請計算它們相加的結

串列埠傳送字串原始碼

 /**   * @brief  USART GPIO 配置,工作引數配置   * @param  無   * @retval 無   */ void USART_Config(void) {     GPIO_InitTypeDef GPIO_InitStructure;

檔案資料轉生成陣列

#include <stdio.h> #include <string.h> /* * feof():當設定了與流關聯的檔案結束識別符號時,該函式返回一個非零值,否則返回零

android byte位元組陣列轉換字串(物聯網開發總結)

想起前段時間的物聯網的外包開發,經常遇到通過wifi接受的資料,要通過轉換成十六進位制字串,或者最後又是十進位制資料。都是根據雙方的協議來開發的。那麼我傳送過去的資料也需要,經過特殊轉換成byte位元組發過去,硬體那邊收到不至於亂碼的資料。 1、硬體除錯發給android這