---
# System prepended metadata

title: 8/30コードスプリント勉強会

---

# 8/30コードスプリント勉強会
## 問題
入力された文字列（UTF-8）に対してBase64変換を施した文字列を出力してください。

### 補足
Base64は、データを64種類の印字可能な英数字のみを用いて、それ以外の文字を扱うことの出来ない通信環境にて
マルチバイト文字やバイナリデータを扱うためのエンコード方式である。
(Wikipediaより)

## Base64の処理具体例
### ABCDEFの場合
+ 2進数に変換
ABCDEFG = 01000001 01000010 01000011 01000100 01000101 01000110 01000111
+ 6bitずつに変換
010000 010100 001001 000011 010001 000100 010101 000110 010001 11
+ 6bitのあまりが出た場合は6bitとなるように0を埋める
010000 010100 001001 000011 010001 000100 010101 000110 010001 110000
+ 変換表を用いて4文字ずつ変換する
"QUJD", "REVG", "Rw"
+ 4文字のあまりが出た場合は「=」を付与して4文字にする
"QUJD", "REVG", "Rw=="
+ すべての文字列を結合する
"QUJDREVGRw=="

### 入出力例
* 例１
・入力
ABCDEFG
・出力
QUJDREVGRw==

* 例２
・入力
株式会社アップロード
・出力
5qCq5byP5Lya56S+44Ki44OD44OX44Ot44O844OJ

### 変換表

| ビット | Base64 | ビット | Base64 | ビット | Base64 | ビット | Base64 |
| -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
| 000000 | A | 010000 | Q | 100000 | g | 110000 | w |
| 000001 | B | 010001 | R | 100001 | h | 110001 | x |
| 000010 | C | 010010 | S | 100010 | i | 110010 | y |
| 000011 | D | 010011 | T | 100011 | j | 110011 | z |
| 000100 | E | 010100 | U | 100100 | k | 110100 | 0 |
| 000101 | F | 010101 | V | 100101 | l | 110101 | 1 |
| 000110 | G | 010110 | W | 100110 | m | 110110 | 2 |
| 000111 | H | 010111 | X | 100111 | n | 110111 | 3 |
| 001000 | I | 011000 | Y | 101000 | o | 111000 | 4 |
| 001001 | J | 011001 | Z | 101001 | p | 111001 | 5 |
| 001010 | K | 011010 | a | 101010 | q | 111010 | 6 |
| 001011 | L | 011011 | b | 101011 | r | 111011 | 7 |
| 001100 | M | 011100 | c | 101100 | s | 111100 | 8 |
| 001101 | N | 011101 | d | 101101 | t | 111101 | 9 |
| 001110 | O | 011110 | e | 101110 | u | 111110 | + |
| 001111 | P | 011111 | f | 101111 | v | 111111 | / |

## サンプルコード
* Java
https://paiza.io/projects/H1GniOQKr4NYKrxA3wUlgQ
* C
https://paiza.io/projects/1e7yrIeU-jTOohsesXtc6A

## 参考
アスキーコード表
https://www.k-cube.co.jp/wakaba/server/ascii_code.html

Wikipedia
https://ja.wikipedia.org/wiki/Base64