Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
http/server/base64.cpp@0:50cedd586816, 2015-06-24 (annotated)
- Committer:
- dflet
- Date:
- Wed Jun 24 09:54:16 2015 +0000
- Revision:
- 0:50cedd586816
First commit work in progress
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| dflet | 0:50cedd586816 | 1 | //***************************************************************************** |
| dflet | 0:50cedd586816 | 2 | // Copyright (C) 2014 Texas Instruments Incorporated |
| dflet | 0:50cedd586816 | 3 | // |
| dflet | 0:50cedd586816 | 4 | // All rights reserved. Property of Texas Instruments Incorporated. |
| dflet | 0:50cedd586816 | 5 | // Restricted rights to use, duplicate or disclose this code are |
| dflet | 0:50cedd586816 | 6 | // granted through contract. |
| dflet | 0:50cedd586816 | 7 | // The program may not be used without the written permission of |
| dflet | 0:50cedd586816 | 8 | // Texas Instruments Incorporated or against the terms and conditions |
| dflet | 0:50cedd586816 | 9 | // stipulated in the agreement under which this program has been supplied, |
| dflet | 0:50cedd586816 | 10 | // and under no circumstances can it be used with non-TI connectivity device. |
| dflet | 0:50cedd586816 | 11 | // |
| dflet | 0:50cedd586816 | 12 | //***************************************************************************** |
| dflet | 0:50cedd586816 | 13 | |
| dflet | 0:50cedd586816 | 14 | /** |
| dflet | 0:50cedd586816 | 15 | * @defgroup base64_api |
| dflet | 0:50cedd586816 | 16 | * |
| dflet | 0:50cedd586816 | 17 | * @{ |
| dflet | 0:50cedd586816 | 18 | */ |
| dflet | 0:50cedd586816 | 19 | #include "base64.h" |
| dflet | 0:50cedd586816 | 20 | |
| dflet | 0:50cedd586816 | 21 | static const char g_ccB64Tbl[65] = |
| dflet | 0:50cedd586816 | 22 | "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; |
| dflet | 0:50cedd586816 | 23 | |
| dflet | 0:50cedd586816 | 24 | |
| dflet | 0:50cedd586816 | 25 | void ConvertToBase64(char *pcOutStr, const char *pccInStr, int iLen) |
| dflet | 0:50cedd586816 | 26 | { |
| dflet | 0:50cedd586816 | 27 | const char* pccIn = (const char *)pccInStr; |
| dflet | 0:50cedd586816 | 28 | char* pcOut; |
| dflet | 0:50cedd586816 | 29 | int iCount; |
| dflet | 0:50cedd586816 | 30 | pcOut = pcOutStr; |
| dflet | 0:50cedd586816 | 31 | |
| dflet | 0:50cedd586816 | 32 | //Loop in for Multiple of 24Bits and Convert to Base 64 |
| dflet | 0:50cedd586816 | 33 | for (iCount = 0; iLen - iCount >=3 ; iCount += 3,pccIn += 3) |
| dflet | 0:50cedd586816 | 34 | { |
| dflet | 0:50cedd586816 | 35 | *pcOut++ = g_ccB64Tbl[pccIn[0] >> 2]; |
| dflet | 0:50cedd586816 | 36 | *pcOut++ = g_ccB64Tbl[((pccIn[0] & 0x03)<<4) | (pccIn[1] >> 4)]; |
| dflet | 0:50cedd586816 | 37 | *pcOut++ = g_ccB64Tbl[((pccIn[1] & 0x0F)<<2) | (pccIn[2] >> 6)]; |
| dflet | 0:50cedd586816 | 38 | *pcOut++ = g_ccB64Tbl[pccIn[2] & 0x3f]; |
| dflet | 0:50cedd586816 | 39 | |
| dflet | 0:50cedd586816 | 40 | } |
| dflet | 0:50cedd586816 | 41 | |
| dflet | 0:50cedd586816 | 42 | //Check if String is not multiple of 3 Bytes |
| dflet | 0:50cedd586816 | 43 | if (iCount != iLen) |
| dflet | 0:50cedd586816 | 44 | { |
| dflet | 0:50cedd586816 | 45 | |
| dflet | 0:50cedd586816 | 46 | unsigned char ucLastByte; |
| dflet | 0:50cedd586816 | 47 | |
| dflet | 0:50cedd586816 | 48 | *pcOut++ = g_ccB64Tbl[pccIn[0] >> 2]; |
| dflet | 0:50cedd586816 | 49 | ucLastByte = ((pccIn[0] & 0x03)<<4); |
| dflet | 0:50cedd586816 | 50 | |
| dflet | 0:50cedd586816 | 51 | |
| dflet | 0:50cedd586816 | 52 | if (iLen - iCount > 1) |
| dflet | 0:50cedd586816 | 53 | { |
| dflet | 0:50cedd586816 | 54 | //If there are 2 Extra Bytes |
| dflet | 0:50cedd586816 | 55 | ucLastByte |= (pccIn[1] >> 4); |
| dflet | 0:50cedd586816 | 56 | *pcOut++ = g_ccB64Tbl[ucLastByte]; |
| dflet | 0:50cedd586816 | 57 | *pcOut++ = g_ccB64Tbl[((pccIn[1] & 0x0F)<<2)]; |
| dflet | 0:50cedd586816 | 58 | } |
| dflet | 0:50cedd586816 | 59 | else |
| dflet | 0:50cedd586816 | 60 | { |
| dflet | 0:50cedd586816 | 61 | //If there is only 1 Extra Byte |
| dflet | 0:50cedd586816 | 62 | *pcOut++ = g_ccB64Tbl[ucLastByte]; |
| dflet | 0:50cedd586816 | 63 | *pcOut++ = '='; |
| dflet | 0:50cedd586816 | 64 | } |
| dflet | 0:50cedd586816 | 65 | |
| dflet | 0:50cedd586816 | 66 | *pcOut++ = '='; |
| dflet | 0:50cedd586816 | 67 | } |
| dflet | 0:50cedd586816 | 68 | |
| dflet | 0:50cedd586816 | 69 | *pcOut = '\0'; |
| dflet | 0:50cedd586816 | 70 | |
| dflet | 0:50cedd586816 | 71 | } |
| dflet | 0:50cedd586816 | 72 | |
| dflet | 0:50cedd586816 | 73 | /// @} |
| dflet | 0:50cedd586816 | 74 | |
| dflet | 0:50cedd586816 | 75 |