国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

IOS 長鏈接與短鏈接之間的轉換

2020-07-26 02:47:02
字體:
來源:轉載
供稿:網友

IOS 長鏈接與短鏈接之間的轉換

首先需要將字符串使用md5加密,添加NSString的md5的類別方法如下

.h文件

#import <CommonCrypto/CommonDigest.h> @interface NSString (md5) -(NSString *) md5HexDigest; @end

.m文件

#import "NSString+md5.h" @implementation NSString (md5) - (NSString *) md5HexDigest{  const char *original_str = [self UTF8String];  unsignedchar result[CC_MD5_DIGEST_LENGTH];  CC_MD5(original_str, strlen(original_str), result);  NSMutableString *hash = [NSMutableStringstring];  for (int i = 0; i < 16; i++)    [hash appendFormat:@"%02X", result[i]];  NSLog(@"lowercaseString = %@",[hash lowercaseString]);  return [hash lowercaseString];} @end

 然后就是轉換算法了,其實與java版本的相同,只是用OC來實現

- (NSString *)shortUrl:(NSString *)url{  NSArray *chars = [[NSArray alloc] initWithObjects:@"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", nil];  NSLog(@"chars = %d", [chars count]);  NSString *key = @"xxxxxx";  NSString *hex = [NSStringstringWithFormat:@"%@",[[key stringByAppendingFormat:@"%@",url] md5HexDigest]];   NSLog(@"hex = %@", hex);  NSMutableArray *resUrl = [[NSMutableArrayalloc] initWithCapacity:4];  for (int i=0; i<4; i++) {    // 把加密字符按照 8 位一組 16 進制與 0x3FFFFFFF 進行位與運算    NSString *sTempSubString = [hex substringWithRange:NSMakeRange(i*8, 8)];        // 這里需要使用 long 型來轉換,因為 Inteper只能處理 31 位 , 首位為符號位 , 如果不用 long ,則會越界    long longOfTemp;    sscanf([sTempSubString cStringUsingEncoding:NSASCIIStringEncoding], "%lx", &longOfTemp);    long lHexLong = 0x3FFFFFFF & longOfTemp;    NSString *outChars = @"";    for (int j=0; j<6; j++) {      // 把得到的值與 0x0000003D 進行位與運算,取得字符數組 chars 索引      long index = 0x0000003D & lHexLong;      // 把取得的字符相加      outChars = [outChars stringByAppendingFormat:@"%@",[chars objectAtIndex:(int)index]];      // 每次循環按位右移 5 位      lHexLong = lHexLong >> 5;    }    // 把字符串存入對應索引的輸出數組    [resUrl insertObject:outChars atIndex:i];  }  return [resUrl objectAtIndex:0];//這里可以返回任意一個元素作為短鏈接(0,1,2,3)} 

提 示:長鏈接轉換短鏈接,原理很簡單,就相當于重命名,只是自己的服務器定義自己的規則,有自己的密鑰(也就是算法中定義的key變量,需要替換成自己用品 定義的key),然后確定使用resUrl中的哪個index的元素為可以識別的短鏈接,如果確定為第0個,那么算法中就要返回第0個。要拿來自己用的 話,只需要改一下key值即可。

必須有服務器定義key,要不點擊轉換成功后的鏈接瀏覽器是無法識別的,還有就是這里返回的字符串僅僅是一 串字符,并不帶有域名什么的,還需要自己確定一套域名規則,比如新浪的地址轉換成功后都是以http://t.cn/打頭的,那么你就需要定義一個類似的 域名,域名具體如何定義這就不細說了!

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 河南省| 大港区| 巴彦县| 鹤庆县| 郴州市| 舒兰市| 禄劝| 读书| 通辽市| 宁夏| 平凉市| 阿克陶县| 绿春县| 镇安县| 凤凰县| 海伦市| 乌恰县| 西乡县| 子洲县| 平遥县| 菏泽市| 紫阳县| 伽师县| 滦南县| 柳州市| 陇西县| 丹阳市| 高碑店市| 资源县| 郑州市| 安吉县| 清新县| 从江县| 兴仁县| 上栗县| 桐城市| 镇赉县| 蕲春县| 共和县| 高安市| 彰化市|