Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Konverter ASCII ke OCTAL, DECIMAL, HEXADESIMAL, dan BINNER
- v 0.0.1
- reference source code :
- http://www.cplusplus.com/forum/beginner/11401/
- http://www.cplusplus.com/forum/general/1764/
- modifikasi oleh : Muhamad Mashudi Ardi Winata (Mashudi Castol)
- muhamadmashudiardiwinata[at]gmail.com
- http://mashudicastol.blogspot.com
- */
- #include <iostream>
- #include <cstdlib>
- #include <cstring>
- #include <fstream>
- #include <cmath>
- using namespace std;
- void A_ke_B(const char*); //fungsi untuk konversi ASCII ke BINARY
- void B_ke_A(const char*); //fungsi untuk konversi ASCII ke BINARY
- int main(void)
- {
- //variable untuk konversi ASCII ke OCTAL, DECIMAL, HEXADESIMAL
- string c;
- int i;
- //deklarasi teks konverter binary
- char text[501];
- //variable menu
- int menu, back;
- //kembali ke menu utama
- do {
- //bersihkan layar
- system("clear");
- cout << "###################################################################\n"
- << "# KONVERSI SISTEM BILANGAN #\n"
- << "# v 0.0.1 #\n"
- << "###################################################################\n"
- << "\n";
- //menu utama
- cout << "Pilih Menu :\n\n";
- cout << "1. Konversi ASCII ke OCTAL, DECIMAL, HEXADESIMAL\n"
- << "2. Konversi ASCII ke BINARY\n"
- << "3. Konversi BINARY ke ASCII\n"
- << "4. Keluar\n\n";
- cout << "Masukkan Pilihan : ";
- cin >> menu;
- //bersihkan layar
- system("clear");
- //menu
- switch(menu) {
- case 1 :
- //prosos Konversi ASCII ke OCTAL, DECIMAL, HEXADESIMAL
- cout << "Konversi ASCII ke OCTAL, DECIMAL, HEXADESIMAL\n\n";
- cout << "Masukkan huruf/angka yang akan dikonversi : ";
- cin >> c;
- cout << "\n";
- for(i = 0; i < c.length(); i++) {
- // keluaran di ASCII, OCTAL, DECIMAL, HEXADESIMAL
- cout << "ASC " << c << endl
- << "OCT " << oct << (int) c [i] << endl
- << "DEC " << dec << (int) c [i] << endl
- << "HEX " << hex << (int) c [i] << endl << endl;
- }
- break;
- case 2 :
- //proses Konversi ASCII ke BINARY
- cout << "Konversi ASCII ke BINARY\n\n";
- cout << "Masukkan huruf/angka yang akan dikonversi : ";
- cin >> text;
- cout << "\n";
- A_ke_B(text);
- break;
- case 3 :
- //proses Konversi BINARY ke ASCII
- cout << "Konversi BINARY ke ASCII\n\n";
- cout << "Masukkan BINARY akan dikonversi : ";
- cin >> text;
- cout << "\n";
- B_ke_A(text);
- break;
- case 4 :
- //keluar program
- system("clear");
- return 0;
- break;
- //jika masukkan tidak ada dalam pilihan menu
- default :
- cout << "Pilihan Anda Tidak Ada di Dalam Menu";
- }
- //keterangan, kembali ke menu utama
- cout << "\n\ntekan tombol 1 untuk kembali ke menu utama, dan 0 untuk keluar.";
- cin >> menu;
- }
- //kembali ke menu utama
- while(menu);
- cout << "\n\n";
- return 0;
- }
- //proses perhitungan ASCII ke BINARY dan sebaliknya dimulai dari sini
- void A_ke_B(const char* input) {
- //variable untuk konversi ASCII ke BINNER
- int ascii; //digunakan untuk menyimpan ascii angka atau karakter
- int length = strlen(input);
- cout << " ";
- for(int x = 0; x < length; x++) {
- ascii = input[x]; //menyimpan karakter
- char* binary_reverse = new char [9]; //alokasi memory dinamik
- char* binary = new char [9];
- int y = 0; //menghitung array yang digunakan
- //ulangi sampai ascii == 1
- while(ascii != 1) {
- if(ascii % 2 == 0) {
- binary_reverse[y] = '0';
- }
- else if(ascii % 2 == 1) {
- binary_reverse[y] = '1';
- }
- ascii /= 2;
- y++; //masukkan 1 untuk ke y untuk perulangan selanjutnya
- }
- if(ascii == 1) {
- binary_reverse[y] = '1';
- y++;
- }
- //isi nol diterakhir jika string bukan 8 karakter(1byte)
- if(y < 8) {
- for(; y < 8; y++) {
- binary_reverse[y] = '0';
- }
- }
- for(int z = 0; z < 8; z++) {
- binary[z] = binary_reverse[7 - z];
- }
- cout << binary; //tampilkan 8 digit angka binary
- delete [] binary_reverse; //bersihkan memori dinamik yang telah dibuat
- delete [] binary;
- }
- cout << "\n";
- }
- void B_ke_A(const char* input) {
- int length = strlen(input); //mendapatkan panjang string
- int binary[8]; //array inin digunakan untuk menyimpan 1 byte dari angka binary (1 karakter)
- int asciiNum = 0; //angka ascii setelah dikonverter dari binary
- char ascii; //karakter ascii itu sendiri
- cout << " ";
- int z = 0; //cdigunakan untuk menghitung
- //membaca di byte. total karakter = length / 8
- for(int x = 0; x < length / 8; x++) {
- //simpan info di dalam binary[0] menuji binary [7]
- for(int a = 0; a < 8; a++) {
- binary[a] = (int) input[z] - 48; //z tidak pernah di ulang
- z++;
- }
- int power[8]; //akan menyimpan power dari 2 di dalam array
- int counter = 7; // power dimulai dari 2^0, berhenti di 2^7
- for(int x = 0; x < 8; x++) {
- power[x] = counter; //power[] = {7,6,5,...1,0}
- counter--;
- }
- //jika computasi asciiNum
- for(int y = 0; y < 8; y++) {
- double a = binary[y]; //simpan elemen dari binary[] sebagai "a"
- double b = power[y]; //simpan elemen dari binary[] sebagai "b"
- asciiNum += a * pow(2, b); //asciiNum = total dari a * 2^power dimana 0 <= power <= 7, power adalah int
- }
- ascii = asciiNum; //penentuan value asciiNum ke ascii, untuk menganti ke karakter terkini
- asciiNum = 0; //reset asciiNum untuk perulangan selanjutnya
- cout << ascii; //menampilkan karakter ascii
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement