打印出double类型在内存中的每个位

printf没有打印二进制。

自己写了一个,先转成16进制,再转成二进制。

也可以先转成8进制,再转成二进制。

我测试环境double是8个字节,64位长度。

*/

/*打印出double在内存的中的每一个二进制位
*/
void DoubleToString(double *p_dl){
       char c_dl_16[16+1];
       char c_dl_64[64+1];
       memset(c_dl_64,'\0',sizeof(c_dl_64));
       unsigned char *t = (unsigned char *)p_dl;
       int charCount = sizeof(double) ;
       memset(c_dl_16,'\0',sizeof(c_dl_16));
       
       if (t == NULL)
       return;
     int i=0;
     for(i=0;i<charCount;i++){
        sprintf(c_dl_16+i*2,"%02x",t[i]);
     }
     /*printf("\n");  */
          printf("[%s]\n",c_dl_16);  
     /*对每一位,将十六进制转换为二进制的字符串*/
     char tmpc[4+1];
     for(int j=0;j<16;j++){
          memset(tmpc,'\0',sizeof(tmpc));
       switch(c_dl_16[j]){
            case '0':
                  memcpy(tmpc,"0000",4);
                  break;
            case '1':
                  memcpy(tmpc,"0001",4);
                  break;
            case '2':
                  memcpy(tmpc,"0010",4);
                  break;                                  
            case '3':
                  memcpy(tmpc,"0011",4);
                  break;  
            case '4':
                  memcpy(tmpc,"0100",4);
                  break;  
            case '5':
                  memcpy(tmpc,"0101",4);
                  break;  
            case '6':
                  memcpy(tmpc,"0110",4);
                  break; 
            case '7':
                  memcpy(tmpc,"0111",4);
                  break; 
            case '8':
                  memcpy(tmpc,"1000",4);
                  break; 
            case '9':
                  memcpy(tmpc,"1001",4);
                  break; 
            case 'a':
                  memcpy(tmpc,"1010",4);
                  break; 
            case 'b':
                  memcpy(tmpc,"1011",4);
                  break;
            case 'c':
                  memcpy(tmpc,"1100",4);
                  break;
            case 'd':
                  memcpy(tmpc,"1101",4);
                  break;
            case 'e':
                  memcpy(tmpc,"1110",4);
                  break;
            case 'f':
                  memcpy(tmpc,"1111",4);
                  break;
       }
       sprintf(c_dl_64+j*4,"%s",tmpc);
     }
     printf("[%s]\n",c_dl_64);
     
}
 

 

使用

    double tmpd=0.01;
    DoubleToString(&tmpd);
    printf("%x\n",0.01);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值