给出一个十六进制的数0xFF 0x80 (只有2“位”) 将其转换成有符号的一字节的十进制整数

时间:2022-08-21 17:52:56

#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.....以此类推。。。。。。