第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

將NSData序列化為十六進(jìn)制字符串的最佳方法

將NSData序列化為十六進(jìn)制字符串的最佳方法

元芳怎么了 2019-08-16 15:30:31
將NSData序列化為十六進(jìn)制字符串的最佳方法我正在尋找一種很好的可可方式將NSData對(duì)象序列化為十六進(jìn)制字符串。我們的想法是將用于通知的deviceToken序列化,然后再將其發(fā)送到我的服務(wù)器。我有以下實(shí)現(xiàn),但我認(rèn)為必須有一些更短更好的方法來實(shí)現(xiàn)它。+ (NSString*) serializeDeviceToken:(NSData*) deviceToken{     NSMutableString *str = [NSMutableString stringWithCapacity:64];     int length = [deviceToken length];     char *bytes = malloc(sizeof(char) * length);     [deviceToken getBytes:bytes length:length];     for (int i = 0; i < length; i++)     {         [str appendFormat:@"%02.2hhX", bytes[i]];     }     free(bytes);     return str;}
查看完整描述

3 回答

?
小怪獸愛吃肉

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊

使用NSData的description屬性不應(yīng)被視為HEX編碼字符串的可接受機(jī)制。該屬性僅供說明,可隨時(shí)更改。作為一個(gè)注釋,在iOS之前,NSData描述屬性甚至沒有以十六進(jìn)制形式返回它的數(shù)據(jù)。

很抱歉在解決方案上喋喋不休,但重要的是要花費(fèi)精力對(duì)其進(jìn)行序列化,而不需要支持除了數(shù)據(jù)序列化之外的其他方面的API。

@implementation NSData (Hex)- (NSString*)hexString{
    NSUInteger length = self.length;
    unichar* hexChars = (unichar*)malloc(sizeof(unichar) * (length*2));
    unsigned char* bytes = (unsigned char*)self.bytes;
    for (NSUInteger i = 0; i < length; i++) {
        unichar c = bytes[i] / 16;
        if (c < 10) {
            c += '0';
        } else {
            c += 'A' - 10;
        }
        hexChars[i*2] = c;

        c = bytes[i] % 16;
        if (c < 10) {
            c += '0';
        } else {
            c += 'A' - 10;
        }
        hexChars[i*2+1] = c;
    }
    NSString* retVal = [[NSString alloc] initWithCharactersNoCopy:hexChars length:length*2 freeWhenDone:YES];
    return [retVal autorelease];}@end


查看完整回答
反對(duì) 回復(fù) 2019-08-16
  • 3 回答
  • 0 關(guān)注
  • 720 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)