美文网首页
iOS NSData与NSString相互转换

iOS NSData与NSString相互转换

作者: 传说中的汽水枪 | 来源:发表于2019-12-23 16:08 被阅读0次

    在平常开发中,经常会遇到过NSDataNSString相关转换的问题,一般都是用:

    NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
    NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    

    但是在实际开发过程中会遇到至少如下三种NSDataNSString转换

    一、字符编码转换

    NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
    NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    

    上述是最常用的UTF8编码转换,实际上有很多编码,但在绝大多数情况下我们都是使用UTF8编码格式。
    具体有哪些编码可以参考:NSStringEncoding 这个枚举值。

    二、Base64编码转换

    NSString *string = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
    NSData *data = [[NSData alloc] initWithBase64EncodedString:string options:NSDataBase64DecodingIgnoreUnknownCharacters];
    

    三、Hex编码

    - (NSString *)stringFromData:(NSData *)data {
        Byte *bytes = (Byte *)[data bytes];
        NSString *string = @"";
        for (NSInteger i = 0; i<data.length; i++) {
            NSString *newHexStr = [NSString stringWithFormat:@"%x", bytes[i] & 0xff]; //16进制数
            newHexStr = [newHexStr uppercaseString];
            if ([newHexStr length] == 1) {
                newHexStr = [NSString stringWithFormat:@"0%@",newHexStr];
            }
            string = [string stringByAppendingString:newHexStr];
        }
        return string;
    }
    
    - (NSData *)dataFromString:(NSString *)string {
        const char *ch = [[string lowercaseString] cStringUsingEncoding:NSUTF8StringEncoding];
        NSMutableData *data = [NSMutableData data];
        while (*ch) {
            if (*ch == ' ') {
                continue;
            }
            char byte = 0;
            if ('0' <= *ch && *ch <= '9') {
                byte = *ch - '0';
            } else if ('a' <= *ch && *ch <= 'f') {
                byte = *ch - 'a' + 10;
            } else if ('A' <= *ch && *ch <= 'F') {
                byte = *ch - 'A' + 10;
            }
            ch++;
            byte = byte << 4;
            if (*ch) {
                if ('0' <= *ch && *ch <= '9') {
                    byte += *ch - '0';
                } else if ('a' <= *ch && *ch <= 'f') {
                    byte += *ch - 'a' + 10;
                } else if('A' <= *ch && *ch <= 'F') {
                    byte += *ch - 'A' + 10;
                }
                ch++;
            }
            [data appendBytes:&byte length:1];
        }
        return data;
    }
    

    相关文章

      网友评论

          本文标题:iOS NSData与NSString相互转换

          本文链接:https://www.haomeiwen.com/subject/xsoznctx.html