我正在尝试将十进制整数转换为十六进制。我已经在网上做了很多搜索,并找到了很多方法来做到这一点。但是,我发现的每一种方式都转换为字符串;例如,我可以将100转换为“64”。这不是我需要做的。我希望能够将100转换为'0x64',这是完全不同的事情。出于某种原因,我怀疑答案非常简单,但我似乎无法找到/记住它。我正在编写C编程语言,只是为了澄清。任何帮助或想法将不胜感激。
谢谢, 哈桑
答案 0 :(得分:5)
C语言中的整数类型实际上没有基础。当你说:
int a = 100;
int b = 0x64;
... a
和b
都具有相同的值。谈论将a
转换为十六进制(或b
转换为十进制)没有任何意义。
答案 1 :(得分:5)
你不能将数字从十进制“转换”为十六进制,因为它是一个数字(通常作为two's complement存储在内存中)。所有可能的positional systems中所有相同数字的表示都存在于数字行的完全相同的点上。你可以在不同的基础上打印:
int num = 15;
printf( "%d", num ); /* prints 15 */
printf( "0x%x", num ); /* prints 0xf */
printf( "0%o", num ); /* prints 017 (octal) */
num = 0xf;
printf( "%d", num ); /* prints 15 */
printf( "0x%x", num ); /* prints 0xf */
printf( "0%o", num ); /* prints 017 (octal) */
num = 017;
printf( "%d", num ); /* prints 15 */
printf( "0x%x", num ); /* prints 0xf */
printf( "0%o", num ); /* prints 017 (octal) */
答案 2 :(得分:0)
嗯,
int i = 100;
char c = i; // c now has the value 0x64 (aka decimal 100)
除了确保i
不大于255之外,你真的没有别的事情要做。
数字基础仅在打印或以其他方式向人类显示数字时才真正发挥作用。就内存中的数字而言,100是0x64,0144是1100100.它们都是相同的值,因此它们都由相同的位组表示。
这就像问你将如何用西班牙语显示绿色。无论您使用何种语言,绿色都是绿色。只有当你试图想出一个把它写成一个单词的方法时,你必须考虑你将要使用的语言。因此,数字和决定你将使用哪个基地。
答案 3 :(得分:0)
100
以十六进制为0x64
,不需要“转换”。整数的基数只是解释的问题。