2017-01-06 7 views
2

Hier ist mein Beispielcode in Objective CWie konvertiert man Byte-Array zu Base64-String in 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]; 
} 

In diesem Beispiel i die bytes die sizeOfBytes und dann appendBytes-NSMutableData mit gewöhnen. zu konvertieren data zu base64 ist

Below Methode verwendet:

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

Es ist sehr einfach in Objective-C, aber als ich versuchte, in schnellen es andere Konzepte für die Zeiger wie UnsafeMutablePointer, UnsafePointer usw.

Wie konvertiert man zu swift 3.0?

Können Sie Kerle bitte machen Sie mir die Verwendung von Zeigern in schnellen

+2

Daten verwenden, lesen http://stackoverflow.com/questions/39515173/how-to-use-unafemutablepointer-in-swift-3 – Ludovic

+0

Was ist Ihr eigentlicher Zweck? Sie möchten üben, wie man mit Swift 'Data' und Zeigern arbeitet, auch wenn Sie wissen, dass Sie die' base64EncodedString' Methode verwenden können? – OOPer

Antwort

4

können Sie Bytes konvertieren Array base64String durch folgende Art und Weise unter Verwendung von

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