• 给出一个十六进制的数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.....以此类推。。。。。。

  • 相关阅读:
    mysql调优
    面试、。。。。
    StringBuffer 和 StringBuilder 的 3 个区别
    msql查询指定日期
    Windows 路由跟踪
    Xdebug配置
    ONVIF流媒体播放流程
    Windows 8 SP1 安装StockTrader 6.1
    使用log4c问题
    xcode插件安装
  • 原文地址:https://www.cnblogs.com/8335IT/p/4853432.html
Copyright © 2020-2023  润新知