如何将十进制整数转换为单个十六进制字符? (C)
问题描述:
我想将十进制整数转换为十六进制。我在网上做了很多搜索,并找到了很多方法来做到这一点。但是,我发现的每种方式都转换为字符串;例如,我可以将100转换为“64”。这不是我需要做的。我希望能够将100转换为'0x64',这完全是另一回事。出于某种原因,我怀疑答案是非常简单的,但我似乎无法找到/记住它。我用C语言编写,只是为了澄清。任何援助或想法将不胜感激。如何将十进制整数转换为单个十六进制字符? (C)
谢谢,在C语言 哈桑
答
您不能将数字从十进制“转换”为十六进制,因为它是一个数字(通常在内存中存储为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) */
答
整型真的不有基地。当你说:
int a = 100;
int b = 0x64;
...都a
和b
具有相同的值。谈论将a
转换为十六进制(或将b
转换为十进制)没有任何意义。
答
嗯,
int i = 100;
char c = i; // c now has the value 0x64 (aka decimal 100)
实在是没有其他任何你需要做的,除了确保i
不超过255
数字基地大才真正开始发挥作用时打印或以其他方式向人类显示数字。就内存中的数字而言,100是0x64,0144是1100100.它们都是相同的值,所以它们全都由相同的一组位表示。
这就像问你如何显示西班牙语的绿色。无论您使用何种语言,绿色都是绿色的。只有当你试图想出一种将它写成单词的方式时,你必须考虑你将使用哪种语言。所以它与数字和决定你将使用哪个基地。
答
100
十进制为0x64
(十六进制),不需要“转换”。整数的基数只是解释的问题。
我伤心地承认这一点,但我写了一系列的做你正在通过解析十六进制字符串,其数量相当于描述的方法。我需要它来创建一个图形计算器来检查从一些旧的不明显格式到当前/常见IEEE格式的浮点转换。我会分享代码,但它是用C#编写的。 – 2010-06-28 00:43:38