楼主偶然需要用到十进制转二进制的方法,百度一下方法好像都是模拟人工计算的,但是楼主想到在内存中数据不是本来就是二进制的吗,把每一位读取出来不就好
首先写个子函数查看一个1字节的数字某位是不是1
inline bool is1(char n,int p){//一个1字节的数字n查看他第p位是不是1
return n&(1<<(8-p-1));
}
然后由于楼主电脑上int是大端模式保存的,所以最低位在第一个字节,最高位在最后一个字节,因此
int main(){
int a=0b00000000111111110000111111110000;
char *p=(char*)&a;//指向a的首地址
for(int i=0;i<8;++i){
putchar(is1(p[3],i)?'1':'0');
}
for(int i=0;i<8;++i){
putchar(is1(p[2],i)?'1':'0');
}
for(int i=0;i<8;++i){
putchar(is1(p[1],i)?'1':'0');
}
for(int i=0;i<8;++i){
putchar(is1(p[0],i)?'1':'0');
}
getchar();
return 0;
}
测试结果正确
再优化一下,最终可以写成这样
void tobin(int a,char* str){
char *p=(char*)&a,c=0,f=0,pos=-1;//p指向a的首地址
for(int o=0;o<4;++o){
for(int i=0;i<8;++i){
c=p[3-o]&(1<<(7-i));
if(!f&&!(f=c))continue;
str[++pos]=c?'1':'0';
}
}
}
转载请注明出处https://blog.csdn.net/rtduq/article/details/80274601