#include "stdafx.h"
#include "iostream"//C++ 콘솔 입출력
#include "stdlib.h"//동적할당
#include "math.h"//계산함수
#include "atlstr.h"//CString
#include "string"//string
using namespace std;
#pragma warning(disable:4996)
#pragma warning(disable:4244)
char* intConverter(char* number,int size, int K, int TARGET_K);
char* decTobi(int number);
char* decTohd(int number);
int _tmain(int argc, _TCHAR* argv[])
{
//itoa 사용법 (int to char[](2,10,16) 진법 )
int number=15;
char target[10];//반드시 정적배열로 선언(포인터 선언 X)
//char* target=(char*)malloc(sizeof(char)*10); //해도 됨.
cout <<"진법변환 + 정수형을 문자열로// 대상 숫자 : "<<number<<"(2,10,16)"<<endl;
cout <<itoa(number,target,2)<<endl;
cout <<itoa(number,target,10)<<endl;
cout <<itoa(number,target,16)<<endl;
cout <<endl;
//char[] to int
char number_2[]="147";
cout <<"char 형을 int 형으로, 대상 숫자 : "<<number_2<<endl;
cout << atoi(number_2)<<endl;
cout <<endl;
//char* to char[]
char* charpointer="char* to char[]";
char chararray[20];
cout <<"char* 형을 char[] 형으로, 대상 문자열 : "<<charpointer<<endl;
cout <<strcpy(chararray,charpointer)<<endl;
//CString to char*
char Buffer[255];
CString szString("CString to char");
size_t CharactersConverted = 0;
wcstombs_s(&CharactersConverted, Buffer, szString.GetLength()+1, szString, _TRUNCATE);
cout <<Buffer<<endl;
//char* to CString, CString cout 출력법
CString x1;
char* x2="char* to CString";
x1=(LPSTR)x2;
cout <<CStringA(x1).GetString()<<endl;//CString 을 cout 로 출력
//CString to int
CString cstringnumber("1442");
int x=_ttoi(cstringnumber);
cout <<x<<endl;
//int to CString, CString cout 출력법
int integernumber=142;
CString numberstring;
numberstring.Format(_T("%d"),integernumber);
cout <<CStringA(numberstring).GetString()<<endl;//CString 을 cout 로 출력
cout <<endl<<"진법변환"<<endl;
//진법변환(2,10,16)
char* binary_number="10110";
char* decimal_number="271";
char* hexadecimal_number="D7";
cout << intConverter(binary_number,5,2,10)<<endl;
cout << intConverter(binary_number,5,2,16)<<endl;
cout << intConverter(decimal_number,3,10,2)<<endl;
cout << intConverter(decimal_number,3,10,16)<<endl;
cout << intConverter(hexadecimal_number,2,16,2)<<endl;
cout << intConverter(hexadecimal_number,2,16,10)<<endl;
return 0;
}
//숫자를 문자열화 한 값, 그 문자열의 크기, 현재 진수, 바꿀 대상 진수
char* intConverter(char* number,int size, int K, int TARGET_K){
if((K!=2&&K!=10&&K!=16)||(TARGET_K!=2&&TARGET_K!=10&&TARGET_K!=16))
return NULL;
if(K==TARGET_K)
return number;
char *number_char=(char*)malloc(sizeof(char)*size);
for(int i=0;i<size;i++)
number_char[i]=number[i];
int decNumber=0;
if(K==2){
for(int i=0;i<size;i++){
if(number_char[i]!='0'&&number_char[i]!='1')
return NULL;
decNumber+=(int)(number_char[i]-'0')*pow((double)K,size-i-1);
}
}else if(K==16){
for(int i=0;i<size;i++){
int temp;
if((int)number_char[i]>47&&(int)number_char[i]<58)
temp=(int)number_char[i]-48;
else if((int)number_char[i]>64&&(int)number_char[i]<71)
temp=(int)number_char[i]-55;
else
return NULL;
decNumber+=temp*pow((double)K,size-i-1);
}
}else
decNumber = atoi(number_char);
if(TARGET_K==2)
return decTobi(decNumber);
else if(TARGET_K==10){
char* temp=(char*)malloc(size*sizeof(char));
itoa(decNumber,temp,10);
return temp;
}
else
return decTohd(decNumber);
}
// decimal -> binary
char* decTobi(int number){
int count =1;
int usenumber=number;
while(number>1){
number/=2;
count++;
}
char* msg=(char*)malloc(count*sizeof(char));
itoa(usenumber,msg,2);
return msg;
}
//decimal->hexadecimal
char* decTohd(int number){
int count =0;
int usenumber=number;
while(number>0){
number/=16;
count++;
}
char* msg=(char*)malloc(count*sizeof(char));
itoa(usenumber,msg,16);
return msg;
}
2017년 5월 15일 월요일
C++ 형변환,정수 진법변환 모음
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기