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

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

c++

3个回答

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

最简单的是 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);
            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';
            }

测试:
图片说明

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐