我有一个变量:
int a = 10;
我想将其转换为0x
前面带有10
as:的十六进制值0x10
,并将其分配给其他变量,如何转换?
使用snprintf()
:
char buf[128];
snprintf(buf, 128, "0x%d", a); // buf = "0x10"
然后使用sscanf()
:
unsigned int new_a;
if (1 == sscanf(buf, "0x%X", &new_a))
{
}
如果您尝试将小数重新解释为十六进制,则问题意味着将多项式重新评估A = a*10^n + b*10^(n-1) + ... + c
为B=a*16^n + b*16^(n-1) + ... + c
1 1 2 3 = 1*1000 + 1 * 100 + 2 * 10 + 3
(0x) 1 1 2 3 = 1*4096 + 1 * 256 + 2 * 16 + 3 (=4387 dec)
找到具有重复模数并除以 10 的系数,并将结果与 16 的适当幂相乘。(使用移位实现)。
这是一个代表性的问题。您可以轻松地将十进制值表示为十六进制
print("0x%x", a);
0xa
这将在您的特定情况下打印出来。因为C
如果您有 0xa 或 10 或 012,这无关紧要。