短地址算法C++版,使用POCO库

#include "Poco/Foundation.h"
#include "Poco/UUID.h"
#include "Poco/UUIDGenerator.h"
#include "Poco/MD5Engine.h"

using Poco::UUID;
using Poco::UUIDGenerator;
using Poco::MD5Engine;
using Poco::DigestEngine;


int short_url(std::string out[],std::string text)
{
	std::string key = "mylib";//自定义生成MD5加密字符串前的混合KEY 
	static char chars[] = {//要使用生成URL的字符 
		'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
		'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
		'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
		'y', 'z', '0', '1', '2', '3', '4', '5',
		'6', '7', '8', '9', 'A', 'B', 'C', 'D',
		'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
		'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
		'U', 'V', 'W', 'X', 'Y', 'Z'
	};
	MD5Engine engine;
	engine.update(key + text);
	std::string hex = engine.digestToHex(engine.digest());
	int hexLen = hex.length();
	int subHexLen = hexLen / 8;

	for (int i = 0; i < subHexLen; i++)
	{
		std::string outChars = "";
		//int j = i + 1;
		std::string subHex = hex.substr(i * 8, 8);
		long val = 0;
		char *str;
		val = (int)strtol(subHex.c_str(), &str, 16);
		long idx = 0x3FFFFFFF & val;
		for (int k = 0; k < 6; k++)
		{
			int index = (int)0x0000003D & idx;
			outChars += chars[index];
			idx = idx >> 5;
		}
		out[i] = outChars;
	}
	return 0;
}
根据网上的java代码改的。

你可能感兴趣的:(C++)