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

之前想自己寫一個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)收獲,所以第一時間來跟大家分享。

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é)果也會換成大寫。因?yàn)槭桥袛囝伾担宰址麛?shù)組固定6位,最后在最前面做一個判斷,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)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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