2017-01-06 5 views
2

Вот мой пример кода в объективном CКак преобразовать массив байтов в base64 строку в swift?

-(NSString *)getImageString : (unsigned char *) charValue : (unsigned long) sizeOfBytes {     

    uint8_t commandbyte[]={ };   

    uint8_t _allBytes[(sizeOfBytes + sizeof(commandbyte))]; 
    memcpy(_allBytes, charValue, sizeOfBytes); 

    NSMutableData *ImageData = [[NSMutableData alloc]init]; 
    [ImageData appendBytes:_allBytes length:sizeof(_allBytes)]; 

    NSString *base64String=[self base64forData:ImageData]; 

    return base64String;      
}     

- (NSString*)base64forData:(NSData*)theData {   

    const uint8_t* input = (const uint8_t*)[theData bytes]; 
    NSInteger length = [theData length]; 

    static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/="; 

    NSMutableData* data = [NSMutableData dataWithLength:((length + 2)/3) * 4]; 
    uint8_t* output = (uint8_t*)data.mutableBytes; 

    NSInteger i; 
    for (i=0; i < length; i += 3) { 
     NSInteger value = 0; 
     NSInteger j; 

     for (j = i; j < (i + 3); j++) { 
      value <<= 8; 

      if (j < length) { 
       value |= (0xFF & input[j]); 
      } 
     } 

     NSInteger theIndex = (i/3) * 4; 
     output[theIndex + 0] = table[(value >> 18) & 0x3F]; 
     output[theIndex + 1] = table[(value >> 12) & 0x3F]; 
     output[theIndex + 2] = (i + 1) < length ? table[(value >> 6) & 0x3F] : '='; 
     output[theIndex + 3] = (i + 2) < length ? table[(value >> 0) & 0x3F] : '='; 
    } 

    return [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; 
} 

В этом примере я использовал, чтобы получить bytes с помощью sizeOfBytes, а затем appendBytes к NSMutableData.

Ниже метод используется для преобразования data в base64:

- (NSString*)base64forData:(NSData*)theData 

Он очень прост в объективном C, но когда я пытался в стрижа там другие понятия для указателей, как UnsafeMutablePointer, UnsafePointer и т.д.

Как конвертировать в swift 3.0 ??

Можете ли вы, ребята, пожалуйста, мне предложить использование указателей в быстрой

+2

Использование данных, чтения http://stackoverflow.com/questions/39515173/how-to-use-unsafemutablepointer-in-swift-3 – Ludovic

+0

Какова ваша фактическая цель? Вы хотите практиковать, как работать с Swift 'Data' и указателями, даже если вы знаете, что можете использовать метод base64EncodedString? – OOPer

ответ

4

Вы можете преобразовать байты массива base64String используя следующим образом

let base64String = data!.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))