#include <stdio.h>
#include<iostream>
#include <stdlib.h>
#include<string.h>
using namespace std;
int main()
{
char ch[8];
char ch2[8]={'0','0','0','0','0','0','0','0'};
ltoa(strtol("0xba",'\0',16),ch,2);
//cout<<strlen(ch);
for(int i=8-strlen(ch),j=0;i<8;i++,j++)
{
ch2[i]=ch[j];
}
if(ch2[0]=='1')
{
cout<<"minus:"<<endl;
cout<<"-"<<(256-strtol("0xba",'\0',16)) <<endl;
}
else{
cout<<"+:"<<endl;
cout<<strtol("0xba",'\0',16)<<endl;
}
return 0;
}
^(* ̄(oo) ̄)^:紅色數字部分為const char*類型;
主要應用的函數為:strtol;ltoa
第一個函數是將第一個參數里的字符串轉換為十進制,遇到\0結束,后邊的數字2-36,指的是前邊的字符串代表的數字進制,而不是將其轉換為某進制。
strtol是將第一個參數的數字轉換成第三個參數的進制並存入第二個參數的數組里。char *ltoa(long value,char *string,int radix)
原碼,反碼,補碼,運算不介紹,這里只是采取投機取巧的方式。。。。
之所以用了ch2是因為ltoa只是把二進制從一開始的有效位賦給ch從零開始。前邊如果有0 ,它並沒有進行賦值。
例如:long(strtol)轉換后的二進制為:00010101---》ltoa只把10101賦給了ch[0]=1,ch[1]=0,ch[2]=1,ch[3]=0,ch[4]=1....ch[5]=null.....以此類推。。。。。。
