Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert byte array to base64 string in swift?

Here is my sample code in objective C

 -(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[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

    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 this example i used to get the bytes using the sizeOfBytes and then appendBytes to NSMutableData.

Below method is used to convert data to base64:

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

It is very simple in objective C, but when i tried in swift there other concepts for pointers like UnsafeMutablePointer, UnsafePointer etc.

How to convert to swift 3.0 ??

Can you Guys please suggest me the usage of pointers in swift

like image 425
naresh d Avatar asked Jan 06 '17 08:01

naresh d


1 Answers

You can convert bytes array to base64String by using following way

let base64String = data!.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))
like image 60
Usman Javed Avatar answered Nov 11 '22 15:11

Usman Javed