日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

OC与c混编实现Java的String的hashcode()函数

發(fā)布時(shí)間:2025/7/14 java 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OC与c混编实现Java的String的hashcode()函数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先,我不愿意大家需要用到這篇文章里的代碼,因?yàn)榛旧夏憔褪潜豢恿恕?br /> 起因:我被Java后臺(tái)人員坑了一把,他們要對(duì)請(qǐng)求的參數(shù)增加一個(gè)額外的字段,字段的用途是來校驗(yàn)其余的參數(shù)是否再傳遞過程中被篡改或因?yàn)榫W(wǎng)絡(luò)原因出現(xiàn)錯(cuò)誤。校驗(yàn)就校驗(yàn)吧,居然選了Java的String的hashcode()函數(shù)作為校驗(yàn)手段,安卓自然完全沒有問題。但是iOS上。。。。。我又繼續(xù)詢問他能否改成比較通用的校驗(yàn)手段,比如md5等,反饋是安卓已經(jīng)上線了。然后無奈職能按照J(rèn)ava的實(shí)現(xiàn)做了一把。

先貼出代碼吧

-(int)DF_hashCode {int hash = 0;for (int i = 0; i<[self length]; i++) {NSString *s = [self substringWithRange:NSMakeRange(i, 1)];char *unicode = (char *)[s cStringUsingEncoding:NSUnicodeStringEncoding];int charactorUnicode = 0;size_t length = strlen(unicode);for (int n = 0; n < length; n ++) {charactorUnicode += (int)((unicode[n] & 0xff) << (n * sizeof(char) * 8));}hash = hash * 31 + charactorUnicode;}return hash; }

我寫個(gè)了個(gè)分類處理這個(gè)hashcode
首先獲取每個(gè)字符,獲取到字符后轉(zhuǎn)成unicode,這里調(diào)試了很久,因?yàn)榘沧康耐抡J(rèn)為是utf8編碼,因?yàn)檫@跟網(wǎng)上許多加密結(jié)果顯示的是一致,經(jīng)過仔細(xì)比對(duì),發(fā)現(xiàn)是unicode編碼。如果是中文字的話,那么就是2個(gè)字節(jié),因?yàn)榫幋a后是以char *輸出,所有對(duì)兩個(gè)字節(jié)進(jìn)行合并成一個(gè)short類型。如果是英文或標(biāo)點(diǎn),那么就是1個(gè)字節(jié),我為樂整齊,就統(tǒng)一用for循環(huán)。其實(shí)獲取到了length不是1個(gè)就是2。
盡管代碼很短,但是已經(jīng)很長時(shí)間沒有直接使用c了,連著調(diào)試和尋找編碼的格式,還是花了不少時(shí)間。希望你們別走彎路,不到萬不得已不要這樣校驗(yàn)。

轉(zhuǎn)載于:https://www.cnblogs.com/qianhongqiang/p/5333732.html

總結(jié)

以上是生活随笔為你收集整理的OC与c混编实现Java的String的hashcode()函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。