xiaohuimary
xiaohui96
采纳率0%
2019-03-23 20:20 阅读 5.1k

C++如何将一个10进制int数转换成16进制的带0x标识符的int型数

请教各位:
在C++中如何将一个10进制的int型数据转换成带0x标识负符的16进制int型数据。
例如将10转换成0x0a,50转换成0x32
由于需要将转换后的数据以16进制的形式发送出去所以需要带0x标识符。
感谢各位!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • caozhy 从今以后生命中的每一秒都属于我爱的人 2019-03-23 21:38
    最简单的是 itoa
    
    int n = 123;
    char buf[100];
    itoa(n, buf, 16);
    char result[100];
    result[0] = '0';
    result[1] = 'x';
    result[2] = '\0';
    strcat(result, buf);
    printf("%s", result);
    
    点赞 1 评论 复制链接分享
  • qq_22300209 D_KING_ 2019-03-27 00:12
                0x是CPP语法定义的16进制数标识,int型变量在内存中是4个字节32位的二进制数,所以无论是十进制还是十六进制,都只是int型变量的表现方式,所以楼主提到的“在C++中如何将一个10进制的int型数据转换成带0x标识负符的16进制int型数据”这个题设是错误的。楼主的问题应该改为“如何将int型变量转换为带0x标识符的16进制字符串”,其中十进制数和十六进制数都是字符串(因为你根本看不到内存中的二进制数,想要把一个int型数显示到显示器上就必须先把它转换成字符串)。如此,再来分析如何将int型变量转换为带0x标识符的16进制字符串:
                string intToHex(int n)
                {
                        string hex="0x";
                        hex += hexUnit((n & 0xF0000000)>>28);
                        hex += hexUnit((n & 0x0F000000)>>24);
                        hex += hexUnit((n & 0x00F00000)>>20);
                        hex += hexUnit((n & 0x000F0000)>>16);
                        hex += hexUnit((n & 0x0000F000)>>12);
                        hex += hexUnit((n & 0x00000F00)>>8);
                        hex += hexUnit((n & 0x000000F0)>>4);
                        hex += hexUnit((n & 0x0000000F));
    
                        return hex;
                }
                char hexUnit(unsigned char unit)
                {
                        if(0<=unit && unit<=9)
                                return unit + '0';
                        else if(10<=unit && unit <=15)
                                return unit-10 + 'A';
    
                        return '0';
                }
    

    测试:
    图片说明

    点赞 评论 复制链接分享
  • Christ4 Christ4 2019-04-01 20:33

    可以试一下sprintf (szBuf, "%#x", value),szBuf为输出字符串,value为输入值

    点赞 评论 复制链接分享

相关推荐