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


    #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",'',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",'',16)) <<endl;
    }
    else{
    cout<<"+:"<<endl;
    cout<<strtol("0xba",'',16)<<endl;
    }
    return 0;
    }

    ^(* ̄(oo) ̄)^:红色数字部分为const char*类型;

    主要应用的函数为:strtol;ltoa

    第一个函数是将第一个参数里的字符串转换为十进制,遇到结束,后边的数字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.....以此类推。。。。。。

  • 相关阅读:
    小程序自定义组件(3)子向父传参
    postgresql插件安装
    二进制减法的实现
    mysql锁表问题
    mysql查看修改参数
    众数问题-找出超过一半的数
    只出现一次的数
    元素最大间距离
    第一个缺失数字
    局部最小值位置
  • 原文地址:https://www.cnblogs.com/8335IT/p/4853432.html
Copyright © 2020-2023  润新知