请教各位:
在C++中如何将一个10进制的int型数据转换成带0x标识负符的16进制int型数据。
例如将10转换成0x0a,50转换成0x32
由于需要将转换后的数据以16进制的形式发送出去所以需要带0x标识符。
感谢各位!
最简单的是 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';
}