<iOS開發(fā)>之類型轉(zhuǎn)換

本文介紹了常見的類型轉(zhuǎn)換.

一.NSString和NSData的互相轉(zhuǎn)換.

  • NSString 轉(zhuǎn) NSData.
NSString *testStr1 = @"better";
NSData *testData1 = [testStr1 dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"testData:%@",testData1);

結(jié)果:

2017-06-06 17:37:44.950912+0800 test1[9204:3141182] testData:<62657474 6572>
  • NSData 轉(zhuǎn) NSString.
NSString *testStr2 = [[NSString alloc] initWithData:testData1 encoding:NSUTF8StringEncoding];
NSLog(@"testStr:%@",testStr2);

結(jié)果:

2017-06-06 17:37:44.951103+0800 test1[9204:3141182] testStr:better

二.NSData和Byte互相轉(zhuǎn)換.

  • NSData 轉(zhuǎn) Byte數(shù)組.
NSString *testStr3 = @"better";
NSData *testData2 = [testStr3 dataUsingEncoding: NSUTF8StringEncoding];
Byte *testByte1 = (Byte *)[testData2 bytes];
for (int i = 0; i < [testData2 length]; i++)
{
    NSLog(@"%d",testByte1[i]);
}

結(jié)果:

2017-06-06 17:37:44.951213+0800 test1[9204:3141182] 98
2017-06-06 17:37:44.951250+0800 test1[9204:3141182] 101
2017-06-06 17:37:44.951283+0800 test1[9204:3141182] 116
2017-06-06 17:37:44.951314+0800 test1[9204:3141182] 116
2017-06-06 17:37:44.951345+0800 test1[9204:3141182] 101
2017-06-06 17:37:44.951376+0800 test1[9204:3141182] 114

說明:
NSData默認(rèn)含有bytes的只讀屬性,可直接調(diào)用.

@property (readonly) const void *bytes NS_RETURNS_INNER_POINTER;
  • Byte數(shù)組 轉(zhuǎn) NSData.
Byte byteArr[] = {98,101,116,116,101,114};
NSData *testData3 = [[NSData alloc] initWithBytes:byteArr length:sizeof(byteArr)/sizeof(Byte)];
NSLog(@"%@",testData3);

結(jié)果:

2017-06-06 17:44:21.302122+0800 test1[9209:3143384] <62657474 6572>

三. 十六進(jìn)制和十進(jìn)制互相轉(zhuǎn)換.

  • 十六進(jìn)制 轉(zhuǎn) 十進(jìn)制 (系統(tǒng)方法)
NSUInteger testData4 = strtoul([testHexStr UTF8String],0,16);
NSLog(@"%zd",testData4);

結(jié)果:

2017-06-06 18:22:00.746316+0800 test1[9286:3154681] 190

strtoul說明:

//參數(shù)1:字符串起始地址.
//參數(shù)2:返回字符串有效數(shù)字的結(jié)束地址,這也是為什么要用二級(jí)指針的原因.
//參數(shù)3:轉(zhuǎn)換基數(shù).當(dāng)base=0,自動(dòng)判斷字符串的類型,并按10進(jìn)制輸出.
strtoul(const char *__str, char **__endptr, int __base);
  • 十進(jìn)制 轉(zhuǎn) 十六進(jìn)制 (系統(tǒng)方法)
NSString *testHexStr = [NSString stringWithFormat:@"%@",[[NSString alloc] initWithFormat:@"%x",190]];
NSLog(@"%@",testHexStr);

結(jié)果:

2017-06-06 18:22:00.746256+0800 test1[9286:3154681] be

說明:
轉(zhuǎn)換結(jié)果不帶0X前綴,如果需要帶0X前綴,且是小寫字母,使用%#x打印格式,若是大寫字母,使用%#X打印格式.

// 十六進(jìn)制轉(zhuǎn)十進(jìn)制
  - (NSString *)convertDecimalWithHexStr:(NSString *)hexStr
{
    int decimal = 0;
    UniChar hexChar = ' ';
    NSInteger hexLength = [hexStr length];
    
    for (NSInteger i = 0; i < hexLength; i++)
    {
        int base;
        hexChar = [hexStr characterAtIndex:i];
        
        if (hexChar >= '0' && hexChar <= '9')
        {
            // 0 的Ascll - 48
            base = (hexChar - 48);
        }
        else if (hexChar >= 'A' && hexChar <= 'F')
        {
            // A 的Ascll - 65
            base = (hexChar - 55);
        }
        else
        {
            // a 的Ascll - 97
            base = (hexChar - 87);
        }
        decimal = decimal + base * pow(16, hexLength - i - 1);
    }
    
    return [NSString stringWithFormat:@"%d",decimal];
}

調(diào)用:

NSLog(@"%@",[self convertDecimalWithHexStr:@"AbCdE"]);

結(jié)果:

2017-06-07 00:59:06.852111+0800 十六進(jìn)制轉(zhuǎn)十進(jìn)制[9450:3194324] 703710
// 十進(jìn)制轉(zhuǎn)十六進(jìn)制
  - (NSString *)convertHexStrWithDecimal:(NSInteger)decimal
{
    NSMutableString *HexStr = [NSMutableString string];
    NSString *currentStr = [NSString string];
    
    // 余數(shù)
    NSInteger remainder = 0;
    // 商
    NSInteger quotient = 0;
    do
    {
        // 余數(shù)
        remainder = decimal % 16;
        quotient = decimal / 16;
        switch (remainder)
        {
            case 10:
                currentStr = @"a";
                break;
            case 11:
                currentStr = @"b";
                break;
            case 12:
                currentStr = @"c";
                break;
            case 13:
                currentStr = @"d";
                break;
            case 14:
                currentStr = @"e";
                break;
            case 15:
                currentStr = @"f";
                break;
            default:
                currentStr = [NSString stringWithFormat:@"%zd",remainder];
                break;
        }
        // 將獲得的字符串插入第一個(gè)位置
        [HexStr insertString:currentStr atIndex:0];
        // 將商作為新的計(jì)算值.
        decimal = quotient;
    } while (quotient != 0);
    
    return HexStr;
}

調(diào)用:

NSLog(@"%@",[self convertHexStrWithDecimal:703710]);

結(jié)果:

2017-06-07 00:59:06.851867+0800 十六進(jìn)制轉(zhuǎn)十進(jìn)制[9450:3194324] abcde

CSDN

iOS開發(fā)之類型轉(zhuǎn)換

個(gè)人博客

iOS開發(fā)之類型轉(zhuǎn)換

GitHub

iOS類型轉(zhuǎn)換TypeConvertDemo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市含滴,隨后出現(xiàn)的幾起案子分瘦,更是在濱河造成了極大的恐慌贷腕,老刑警劉巖设哗,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異迫横,居然都是意外死亡谓谦,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畅姊,“玉大人咒钟,你說我怎么就攤上這事∪粑矗” “怎么了朱嘴?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)粗合。 經(jīng)常有香客問我萍嬉,道長(zhǎng),這世上最難降的妖魔是什么隙疚? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任壤追,我火速辦了婚禮,結(jié)果婚禮上供屉,老公的妹妹穿的比我還像新娘行冰。我一直安慰自己,他們只是感情好伶丐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布悼做。 她就那樣靜靜地躺著,像睡著了一般哗魂。 火紅的嫁衣襯著肌膚如雪肛走。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天啡彬,我揣著相機(jī)與錄音羹与,去河邊找鬼。 笑死庶灿,一個(gè)胖子當(dāng)著我的面吹牛纵搁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播往踢,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼腾誉,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了峻呕?” 一聲冷哼從身側(cè)響起利职,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瘦癌,沒想到半個(gè)月后猪贪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡讯私,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年热押,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了西傀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡桶癣,死狀恐怖拥褂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情牙寞,我是刑警寧澤饺鹃,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站间雀,受9級(jí)特大地震影響悔详,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雷蹂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一伟端、第九天 我趴在偏房一處隱蔽的房頂上張望杯道。 院中可真熱鬧匪煌,春花似錦、人聲如沸党巾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽齿拂。三九已至驳规,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間署海,已是汗流浹背吗购。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留砸狞,地道東北人捻勉。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像刀森,于是被迫代替她去往敵國(guó)和親踱启。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • /**ios常見的幾種加密方法: 普通的加密方法是講密碼進(jìn)行加密后保存到用戶偏好設(shè)置( [NSUserDefaul...
    彬至睢陽閱讀 2,932評(píng)論 0 7
  • 常量的概述和使用 A:什么是常量在程序執(zhí)行的過程中其值不可以發(fā)生改變 B:Java中常量的分類字面值常量自定義常量...
    野望君閱讀 617評(píng)論 0 0
  • 轉(zhuǎn)行并非換個(gè)工作或是換個(gè)崗位那么簡(jiǎn)單,本質(zhì)是自我身份轉(zhuǎn)變和再認(rèn)同的過程榜晦,是一個(gè)職業(yè)身份重新塑造冠蒋,重新闡釋的過程。 ...
    萌丸1014閱讀 320評(píng)論 0 2
  • 1時(shí)間安排上提前出門半小時(shí) -2-化妝在家里結(jié)束 3-單子提前寫好 4-看優(yōu)點(diǎn)三條 5-責(zé)人之心恕罪赦免 6-清明...
    鑫城閱讀 276評(píng)論 0 0
  • 今天遇到讓我感動(dòng)的人(三十九:對(duì)風(fēng)說的話) 2016-07-10 今天遇到讓我感動(dòng)的人 對(duì)風(fēng)說的話 就連風(fēng)也沒聽過...
    江海寄閱讀 406評(píng)論 0 3