iOS 16進(jìn)制字符串轉(zhuǎn)數(shù)字,及數(shù)字轉(zhuǎn)16進(jìn)制字符串

之前想自己寫一個(gè)UIColor的分類负懦,實(shí)現(xiàn)可以輸入十六進(jìn)制字符串(例如:0xff8ac)的顏色值來設(shè)置方便的設(shè)置顏色(雖然網(wǎng)上有很多畏铆,但是想自己造輪子嘛)雷袋,但是關(guān)于十六進(jìn)制和字符串之間的轉(zhuǎn)換一直找不到簡便的方法來實(shí)現(xiàn),最近逼著自己看C語言基礎(chǔ)及進(jìn)階的書辞居,總算還是有點(diǎn)收獲楷怒,所以第一時(shí)間來跟大家分享。

1瓦灶、數(shù)字轉(zhuǎn)十六進(jìn)制字符串

- (NSString *)stringWithHexNumber:(NSUInteger)hexNumber{
    
    char hexChar[6];
    sprintf(hexChar, "%x", (int)hexNumber);
    
    NSString *hexString = [NSString stringWithCString:hexChar encoding:NSUTF8StringEncoding];
    
    return hexString;
}
Paste_Image.png

Paste_Image.png

解釋一下鸠删,函數(shù)sprintf是C語言提供的格式化輸出函數(shù)"%x"相信大家都能看懂贼陶,就是十六進(jìn)制輸出刃泡,如果換成大寫"%X",相應(yīng)的字符串結(jié)果也會(huì)換成大寫碉怔。因?yàn)槭桥袛囝伾岛嫣宰址麛?shù)組固定6位,最后在最前面做一個(gè)判斷撮胧,if(hexNumber > 0xffffff) return nil;桨踪。不僅支持十六進(jìn)制,還支持八進(jìn)制輸出"%o"芹啥,當(dāng)然意義不大锻离。

2、十六進(jìn)制字符串轉(zhuǎn)數(shù)字

- (NSInteger)numberWithHexString:(NSString *)hexString{

    const char *hexChar = [hexString cStringUsingEncoding:NSUTF8StringEncoding];
    
    int hexNumber;
    
    sscanf(hexChar, "%x", &hexNumber);
    
    return (NSInteger)hexNumber;
}
Paste_Image.png

Paste_Image.png

sscanf是C言語提供的格式化輸入函數(shù)墓怀,很簡單汽纠,當(dāng)然你要顏色值如果是0xabc123格式的你就要自己先判定了。大家可以測試一下傀履。

3虱朵、UIColor分類實(shí)現(xiàn)十六進(jìn)制顏色值轉(zhuǎn)換

.h文件

#import <UIKit/UIKit.h>

@interface UIColor (Hex)
/**
 @param hexString   NSString e.g:@"0xFC5B13"
 @param alpha  alhpa
 */
+ (instancetype)colorWithHexString:(NSString *)hexString alpha:(CGFloat)alpha;
+ (instancetype)colorWithHexString:(NSString *)hexString;

@end

.m文件

#import "UIColor+Hex.h"

@implementation UIColor (Hex)

+ (instancetype)colorWithHex:(int)hexNumber alpha:(CGFloat)alpha{
    
    if (hexNumber > 0xFFFFFF) return nil;
    
    CGFloat red   = ((hexNumber >> 16) & 0xFF) / 255.0;
    CGFloat green = ((hexNumber >> 8) & 0xFF) / 255.0;
    CGFloat blue  = (hexNumber & 0xFF) / 255.0;
    
    UIColor *color = [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
    
    return color;
    
}

+ (instancetype)colorWithHexString:(NSString *)hexString alpha:(CGFloat)alpha{
    
    hexString = [[hexString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
    
    UIColor *defaultColor = [UIColor clearColor];
    
    if (hexString.length < 6) return defaultColor;
    if ([hexString hasPrefix:@"#"]) hexString = [hexString substringFromIndex:1];
    if ([hexString hasPrefix:@"0X"]) hexString = [hexString substringFromIndex:2];
    if (hexString.length != 6) return defaultColor;
    
    //method1
    NSScanner *scanner = [NSScanner scannerWithString:hexString];
    unsigned int hexNumber;
    if (![scanner scanHexInt:&hexNumber]) return defaultColor;
    
    //method2
    const char *char_str = [hexString cStringUsingEncoding:NSASCIIStringEncoding];
    int hexNum;
    sscanf(char_str, "%x", &hexNum);
    
    return [UIColor colorWithHex:hexNumber alpha:alpha];
}

+ (instancetype)colorWithHexString:(NSString *)hexString{
    return [UIColor colorWithHexString:hexString alpha:1.0f];
}

method1是蘋果官方提供的類,功能和method2類似钓账,選一種即可碴犬。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市官扣,隨后出現(xiàn)的幾起案子翅敌,更是在濱河造成了極大的恐慌,老刑警劉巖惕蹄,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚯涮,死亡現(xiàn)場離奇詭異,居然都是意外死亡卖陵,警方通過查閱死者的電腦和手機(jī)遭顶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泪蔫,“玉大人棒旗,你說我怎么就攤上這事。” “怎么了铣揉?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵饶深,是天一觀的道長。 經(jīng)常有香客問我逛拱,道長敌厘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任朽合,我火速辦了婚禮俱两,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘曹步。我一直安慰自己宪彩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布讲婚。 她就那樣靜靜地躺著尿孔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪磺樱。 梳的紋絲不亂的頭發(fā)上纳猫,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音竹捉,去河邊找鬼芜辕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛块差,可吹牛的內(nèi)容都是我干的侵续。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼憨闰,長吁一口氣:“原來是場噩夢啊……” “哼状蜗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鹉动,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤轧坎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后泽示,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缸血,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年械筛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捎泻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡埋哟,死狀恐怖笆豁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤闯狱,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布煞赢,位于F島的核電站,受9級(jí)特大地震影響扩氢,放射性物質(zhì)發(fā)生泄漏耕驰。R本人自食惡果不足惜爷辱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一录豺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧饭弓,春花似錦双饥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至阀趴,卻和暖如春昏翰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背刘急。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工棚菊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叔汁。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓统求,卻偏偏與公主長得像,于是被迫代替她去往敵國和親据块。 傳聞我的和親對(duì)象是個(gè)殘疾皇子码邻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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

  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,212評(píng)論 0 4
  • php usleep() 函數(shù)延遲代碼執(zhí)行若干微秒。 unpack() 函數(shù)從二進(jìn)制字符串對(duì)數(shù)據(jù)進(jìn)行解包另假。 uni...
    思?jí)鬚HP閱讀 1,981評(píng)論 1 24
  • 什么是代碼注釋像屋?代碼注釋的作用是幫助程序員標(biāo)注代碼的用途,過一段時(shí)間后再看你所編寫的代碼边篮,就能很快想起這段代碼的用...
    吳迪好閱讀 229評(píng)論 0 0
  • 真正的強(qiáng)大己莺,是看你能吸引多少人、影響多少人苟耻。你自己不牛逼篇恒,認(rèn)識(shí)再多牛逼的人也沒有用。現(xiàn)在每個(gè)人都是很現(xiàn)實(shí)的...
    人間正道007閱讀 558評(píng)論 0 1
  • 旅游大巴在山間穿梭,走了什么路過了幾條隧道,除了因?yàn)榍缣斓木壒?能夠依靠太陽的方向辨一辨東南西北,完全是暈暈乎乎到...
    心若芷蘭閱讀 449評(píng)論 5 3